我的代码如下所示:(其中“user”是编辑后从视图传回的UserProfile实例)
UserProfile original = DBContext.UserProfiles.Where(x => x.UserId == user.UserId).FirstOrDefault();
if (original != null)
{
original = user;
DAL.DAL.Instance.TGIMobiledb.SaveChanges();
}
此代码会在没有错误的情况下触发,但不会更新数据库。经过一些研究后,似乎我必须在调用SaveChanges()
DBContext.Entry(original).State = EntityState.Modified;
但是这行代码导致了这个错误:
“ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象。”
如果我像这样手动分配每个字段,则更改会保存到db:
original.UserId = user.UserId;
original.FirstName = user.FirstName;
original.Surname = user.Surname;
original.UserName = user.UserName;
显然这不是最优的,特别是对于较大的实体。
答案 0 :(得分:1)
尝试:
DBContext.Entry(original).CurrentValues.SetValues(user);
答案 1 :(得分:0)
我猜你检索用户并检查是否为null,看看你是否需要创建或更新它。
相反,您可以查看UserId
字段。
if (user.UserId == 0)
{
DBContext.UserProfiles.Add(user);
}
else
{
DBContext.UserProfiles.Attach(user);
DBContext.Entry(user).State = EntityState.Modified;
}