簡體   English   中英

實體框架-重復處理

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

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