2013-02-08 58 views
0

我有其中两个字段(idLocation, zipcode)作为主键的表:如何忽略违反主键约束中的LINQ to SQL

CREATE TABLE [dbo].[locationZipCode](
    [idLocation] [int] NOT NULL, 
    [zipcode] [char](5) NOT NULL, 
    [state] [char](2) NULL, 
    CONSTRAINT [locationZipCode_pk_idLocation_zipcode] PRIMARY KEY CLUSTERED ([idLocation], [zipcode]) 
) 

在我的应用我打电话:

context.InsertAllOnSubmit(entities); 
context.SubmitChanges(ConflictMode.ContinueOnConflict); 

并且在尝试插入重复记录时获取重复密钥违例。这是预料之中的。如果有任何记录重复,则不插入记录。 有没有办法忽略重复键的异常,并继续插入任何不违反主键约束的记录?

我知道我可以在我的应用程序中调用InsertAllOnSubmit()之前验证重复,但如果我能够捕获错误并继续插入,那将是理想的。

+1

循环遍历实体并调用插入并为每个实体提交。那么你可以自己捕捉并处理错误。这听起来像是一个可怕的想法。验证您的输入。 – cadrell0 2013-02-08 18:36:02

回答

2

对于SQL Server IGNORE_DUP_KEY标志使数据库引擎忽略密钥违规。如果密钥存在,则数据库中没有更改

CREATE UNIQUE CLUSTERED INDEX [locationZipCode_idx] ON locationZipCode 
(
    [idLocation] ASC, [zipcode] ASC 
) WITH (IGNORE_DUP_KEY = ON) 

不要忘记先删除当前的PK。

+0

我不认为OP想要插入重复项,他只是不想插入它们。 – cadrell0 2013-02-08 18:36:45

+0

@ cadrell0这正是SQL所做的。没有重复,同一个键的第二和第二个插入没有错误。 – Anri 2013-02-08 18:39:13

+0

@Anri我的不好,我没有看文档。 – cadrell0 2013-02-08 18:41:21