ASP.NET MVC Entity更新中的故障排除實體鍵衝突
在通過郵政請求中更新ASP.NET MVC中的實體時,您可能會遇到以下錯誤:
這個錯誤是由於試圖將實體附加到
<code>Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value.</code>
試圖合併實體,導致衝突。
DbContext
DbContext
場景和根本原因
> 想像在控制器中編輯一個“ A”實體。 GET ACTION使用加載實體。 然後,郵局試圖將其附加和更新。 但是,如果另一個具有相同主鍵的“ A”實體在其他地方加載(例如,在用戶訪問驗證期間),則會產生跟踪衝突。
Find()
>使用
分辨率
AsNoTracking()
>最有效的解決方案是防止DBContext跟踪用於驗證的實體。 使用方法:
AsNoTracking()
<code class="language-csharp">private bool canUserAccessA(int aID) { int userID = WebSecurity.GetUserId(User.Identity.Name); int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID == userID).Count(); return (aFound > 0); }</code>
>替代:AsNoTracking()
方法
>
>另一種方法涉及在使用Detach()
>方法修改之前將實體脫離。這樣可以防止跟踪衝突。 但是,請注意,分離可能會影響您的代碼的其他部分,因此在實施此解決方案之前仔細考慮其含義。
以上是在ASP.NET MVC中編輯實體時,如何解決實體關鍵衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!