如果 Entity framework 中正在使用另一个实体,如何更新一个实体

How to update one entity if another is in use in Entity framework

我在使用从原始实体更新的某些字段更新实体时遇到一个问题。代码如下

 public int SaveUser(UserDetail objUserDet)
    {
     DBEntities context = new DBEntities();
     UserDetail userDetail = (from u in context.UserDetails.Where(u => u.UserDetID == objUserDet.UserDetID)
                                         select u).Single();
     objUserDet.UserId = userDetail.UserId;
     //context.UserDetails.ApplyCurrentValues(objUserDet); //For ObjectContext works fine.
     context.UserDetails.Attach(objUserDet);
     context.Entry(objUserDet).State = EntityState.Modified;
     context.SaveChanges();
    }

但是它给了我一个像

这样的错误

附加类型的实体失败,因为相同类型的另一个实体已经具有相同的主键值。

如何将一个实体更新为具有相同主键的另一个实体。

我 99% 确定错误是由于在内存上下文中有两个具有相同主键的附加对象。因此,您应该:

  1. 不是selectuserDetail,或者
  2. 不附加 objUserDet 而是将更改的值传输到 userDetail 对象。

您也可以在 SaveChanges 之前分离 userDetail 对象。