簡體   English   中英

批量插入數據實體框架7

[英]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.

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