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

问题描述:

我使用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(); 
} 

首先,如果你已经从objContext检索objUser,真的没有点在用户连接到上下文只是取回后。所以,我在这里完全放弃这一行:

objContext.Attach(objUser); 

而且 - 你可能只需要从值更新每个属性的基础上objUser_user,而不仅仅是分配整个对象。

为了帮助您避免繁琐的代码,您可以使用类似AutoMapper之类的东西来让您将属性从一种对象类型分配给另一种。或者你可以创建一个智能程序会比较上objUser,它们事实上从_user的值不同的两个objUser_user和更新只有那些特性 - 不应该太难创建方法:

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

objUser和_user是对象的句柄。当你找到objUser时,你会发现一个对象,把它的句柄赋给objUser,并将它添加到你的上下文中。当你说objUser = _user时,你不更新对象,你只是将变量指向一个不同的对象。上下文仍然指向旧对象。正如marc_s所说,你需要一个接一个地复制属性,或者有一些快捷方式可以“批量”复制它们,但重点是你必须更新现有的对象,而不是重新分配它。 – Jay 2013-03-15 21:38:12