在將實體附加在ASP.NET MVC
中時,將重複的主鍵錯誤進行故障排除。 在ASP.NET MVC應用程序中,由於重複的主要密鑰約束違規,嘗試附加實體可能會失敗。 這通常表現為一個錯誤消息,表明具有相同主鍵的實體已經存在。 本文詳細介紹了一個共同的原因及其解決方案。 使用
將實體的狀態更新為時,問題經常出現。 調查通常表明,在狀態更新之前,一個單獨的功能負責授權或數據檢索的單獨函數,請預先加載相同的實體
>。 此預加載過程可能會導致實體變得分離,從而導致後續操作失敗,因為該框架認為它正在嘗試添加重複。>解決方案涉及防止預加載函數跟踪加載實體。 這可以通過在實體框架查詢中利用EntityState.Modified
的方法來實現。 db.Entry(entity).State = EntityState.Modified
>
考慮有問題的函數的以下示例:Attach
>
>此功能加載實體,使其可通過上下文跟踪。 要糾正這一點,請修改函數以使用AsNoTracking()
:
canUserAccessA
使用
<code class="language-csharp">// Problematic function - loads and tracks the entity private bool canUserAccessA(int aID) { int userID = WebSecurity.GetUserId(User.Identity.Name); int aFound = db.Model.Where(x => x.aID == aID && x.UserID == userID).Count(); // Tracks the entity return (aFound > 0); }</code>>或
操作發生衝突。 請注意,在與AsNoTracking()
一起使用
<code class="language-csharp">// Corrected function - loads the entity without tracking 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>
此修改有效地解決了重複的主要關鍵問題,為ASP.NET MVC開發中的類似問題提供了可靠的解決方案。
以上是如何解決ASP.NET MVC中的'由於重複的主要鑰匙值的重複主鍵值失敗”的'附加實體失敗”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!