簡體   English   中英

單記錄與大記錄插入-實體框架

[英]Single Record vs Bulk Records Insert - Entity Framework

當我嘗試填充上下文對象並一次保存/插入所有記錄時,出現以下錯誤。

{“違反主鍵約束'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();

但是,如果我為每條記錄創建上下文,然后將該記錄插入/保存到db中,則效果很好。 見下文。

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

在第一個示例中,您要多次添加同一實體,並且主鍵值重復,從而導致錯誤。 您執行此操作的第二種方法是正確的。 循環完成后僅調用保存更改,而不會影響性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM