[英]Entity Framework - duplicates handling
我正在使用Entity Framework 6,C#和MySQL InnoDB作為我們的數據庫引擎。
我有以下代碼來“插入重復更新”記錄:
public async Task AddHostIdToGroup(HostsToGroup hostToGroup)
{
using (var context = new MaintDbContext())
{
HostsToGroup htg = context.HostsToGroup.SingleOrDefault(hs => hs.HostId == hostToGroup.HostId);
if (htg != null)
{
htg.GroupId = hostToGroup.GroupId;
await context.SaveChangesAsync();
}
else
{
context.HostsToGroup.Add(hostToGroup);
await context.SaveChangesAsync();
}
}
}
該代碼本身看起來很適合insert on duplicate update
。
盡管如此,在我們的生產服務器上,我偶爾還是會看到duplicate errors
。
我最初的想法是這是一個種族問題。
我該如何防止這些錯誤,或者應該如何處理?
您的問題不一定是代碼,而是觸發該代碼的原因。 假設代碼是由ASP.net應用程序按鈕觸發的,如果用戶雙擊該按鈕,則它可能引發兩個同時請求,從而導致創建雙重實體。
因此,要么修復前端/入口點以消除重復創建的情況,要么將所有內容推送到允許您進行重復數據刪除的同步服務/隊列中,或者使用Where
而不是Single
並處理代碼中的重復數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.