更新在 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();
}
I use ADO.net Entity Data model for work with database.
In my program, I want to update a record of user table, so I use the code below to do this.
In this function I send changed user info and then overwrite the information with the current user information.
After I run objUser = _user;
and then call objContext.SaveChanges();
to save the changes.
But when I do this, the changes are not persisted to the database. I use this code for another programs but in this case the code does not work!
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();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,如果您已经从
objContext
检索objUser
,那么在检索用户后立即将该用户附加到上下文确实没有意义。因此,我将这一行完全放在这里:另外 - 您可能只需要根据
_user
中的值在每个属性的基础上更新objUser
,而不是只分配整个属性目的。为了帮助您避免大量繁琐的代码,您可以使用 AutoMapper 之类的东西来让您从一种对象类型分配属性到另一个。或者,您可以创建一个智能例程来比较两个
objUser
和_user
,并仅更新objUser
上实际上与_user
中的值 - 创建该方法应该不会太难:First of all, if you already retrieve
objUser
from theobjContext
, there's really no point in attach that user to the context just after retrieving it. So I would drop this line here entirely:Also - you might just need to update the
objUser
on a per-property basis from the values in_user
instead of just assigning the whole object.To help you avoid lots of tedious code, you could use something like AutoMapper to let you assign properties from one object type to the other. Or you could create a smart routine that would compare the two
objUser
and_user
and update only those properties onobjUser
that are in fact different from the values in_user
- shouldn't be too hard to create that method: