[英]Bulk insert data entity framework 7
通常在上一個項目中,我可以通過將對象列表作為下面的代碼傳遞來進行批量插入
public void Create(List<ApplicationUserRole> item)
{
foreach (var data in item)
{
_dbContext.ApplicationUserRole.Add(data);
}
_dbContext.SaveChanges();
}
但是現在我一直在犯錯誤
InvalidOperationException:無法跟蹤實體類型'Docdoc.Models.ApplicationUserRole'的實例,因為已經跟蹤了具有相同鍵的該類型的另一個實例。 對於新實體,請考慮使用IIdentityGenerator生成唯一的鍵值。
我需要在下面更改我的代碼才能工作
foreach (var data in item)
{
_dbContext.ApplicationUserRole.Add(data);
_dbContext.SaveChanges();
}
我知道這是非常糟糕的做法。 插入大量數據會導致性能下降
這個問題有解決方案嗎?
您看到的異常消息可能無法通過在每次添加后調用“ SaveChanges”來解決。 問題的根本原因是,您的DbContext實例已經具有帶有相同密鑰的ApplicationUserRole實體(猜測為ApplicationUserRole.Id或其他名稱)。 此錯誤很常見 ,通常是由手動設置臨時鍵值引起的,例如,將ApplicationUserRole.Id設置為-1。 (例如,請參見https://github.com/aspnet/EntityFramework/issues/4488 。)
如果該錯誤不是由於錯誤地設置了臨時鍵值引起的,則還應確保DbContext實例是短暫的並且僅在一個線程中使用。 換句話說,僅對一個操作使用DbContext。
public void Create(List<ApplicationUserRole> item)
{
using (var context = new MyContext())
{
context.ApplicationUserRole.AddRange(data);
context.SaveChanges();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.