MVC4 EF5更改未保存到DB

时间:2013-07-30 08:01:18

标签: asp.net-mvc-4 entity-framework-5

我的代码如下所示:(其中“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;

显然这不是最优的,特别是对于较大的实体。

2 个答案:

答案 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;
}