更新在ADO.net实体数据模型中不起作用

时间:2010-07-10 15:16:27

标签: asp.net entity-framework ado.net

我使用 ADO.net实体数据模型来处理数据库。

在我的程序中,我想更新用户表的记录,所以我使用下面的代码来执行此操作。

在此功能中,我发送更改的用户信息,然后用当前用户信息覆盖信息。

运行objUser = _user;后,然后致电objContext.SaveChanges();保存更改。

但是当我这样做时,更改不会持久保存到数据库中。我将此代码用于其他程序,但在这种情况下代码不起作用!

public void Update(tbLiUser _user)
{
    LinkContext objContext = this.Context;

    tbLiUser objUser = objContext.tbLiUsers.First(u => u.tluId == _user.tluId);
    objContext.Attach(objUser);
    objUser = _user;

    objContext.SaveChanges();
}

1 个答案:

答案 0 :(得分:2)

首先,如果您已经从objUser检索objContext,那么在检索它之后,将该用户附加到上下文中确实没有意义。所以我完全放弃这一行:

objContext.Attach(objUser);

此外 - 您可能只需要根据objUser中的值更新每个属性的_user,而不是仅仅分配整个对象。

为了帮助您避免繁琐的繁琐代码,您可以使用AutoMapper之类的东西来分配从一种对象类型到另一种对象类型的属性。或者您可以创建一个智能例程来比较两个objUser_user,并仅更新objUser上与_user中的值不同的那些属性 - 应该要创建这种方法太难了:

objUser.UpdateValuesFromOtherUser(_user);
objContext.SaveChanges();