如果 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% 确定错误是由于在内存上下文中有两个具有相同主键的附加对象。因此,您应该:
- 不是select
userDetail
,或者
- 不附加
objUserDet
而是将更改的值传输到 userDetail
对象。
您也可以在 SaveChanges
之前分离 userDetail
对象。
我在使用从原始实体更新的某些字段更新实体时遇到一个问题。代码如下
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% 确定错误是由于在内存上下文中有两个具有相同主键的附加对象。因此,您应该:
- 不是select
userDetail
,或者 - 不附加
objUserDet
而是将更改的值传输到userDetail
对象。
您也可以在 SaveChanges
之前分离 userDetail
对象。