2013-02-08 86 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