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

时间:2015-03-26 15:36:57

标签: entity-framework entity-framework-6

我在更新实体时面临一个问题,其中一些字段从原始实体更新。代码如下所示

 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();
    }

但它给我一个像

这样的错误

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

如何使用相同的主键更新一个实体与另一个实体。

1 个答案:

答案 0 :(得分:1)

我99%确定错误是由于内存中的两个附加对象具有相同的主键。所以,你应该:

  1. 不选择userDetail
  2. 不附加objUserDet并将更改后的值转移到userDetail对象。
  3. 您也可以在userDetail之前分离SaveChanges对象。