2014-01-22 114 views
0

當我嘗試填充上下文對象並一次保存/插入所有記錄時,出現以下錯誤。單記錄與批量記錄插入 - 實體框架

{ 「PRIMARY KEY約束違反 'PK_ T8 _2D83E3D3'。不能插入對象 'dbo.T8'。重複的鍵值(AWLS0757043072)重複鍵。\ r \ n該語句已終止。」 }

var proxy = new AREntities(); 
foreach (var a in b) 
{ 
    .......... 
    proxy.AddtoXYZ(data); //Please note 'data' inside foreach loop is different at all times. I am not adding same record multiple times. 
} 
proxy.SaveChanges(); 

但是,如果我爲每個記錄創建上下文,然後插入/保存該記錄到數據庫,它工作正常。見下文。

foreach (var a in b) 
{ 
    .......... 
    var proxy = new AREntities(); 
    proxy.AddtoXYZ(data); 
    proxy.SaveChanges(); 
} 

但上面的代碼顯然是螺絲釘的性能。我正在嘗試診斷爲什麼我在場景1中出現錯誤。有什麼想法?

這裏是關鍵約束的定義。

ALTER TABLE [dbo].[T8] ADD PRIMARY KEY CLUSTERED 
(
    [C1] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
GO 
+0

我看到** proxy.AddtoXYZ(數據); **,檢查數據對象C1屬性值在foreach循環中不重複 –

+0

這是我檢查的第一件事情,C1在所有時間都是不同的。 – Nanu

+0

你有沒有嘗試重建EntityFrameWork數據模型? –

回答

0

在第一個示例中,您將多次添加相同的實體,並且主鍵值會被重複,從而導致錯誤。你做這件事的第二種方法是正確的。循環完成後只調用保存更改,不會影響性能。

+0

foreach循環內的數據在任何時候都是不同的。我不會多次添加同一個項目。 – Nanu

+0

在第一種情況下,您使用不同的數據修改同一個對象。只需移動循環外保存更改 –

+0

這就是我想要做的,那就是當我得到錯誤。 – Nanu