我的代码如下所示:(其中“用户”是编辑后从视图传回的 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 无法跟踪具有相同键的多个对象。”
如果我像这样手动分配每个字段,则更改将保存到数据库中:
original.UserId = user.UserId;
original.FirstName = user.FirstName;
original.Surname = user.Surname;
original.UserName = user.UserName;
显然,这不是最优的,尤其是对于较大的实体。