在将实体附加在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中文网其他相关文章!