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

发布于 2024-09-08 18:40:26 字数 515 浏览 3 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多像笑话 2024-09-15 18:40:26

首先,如果您已经从 objContext 检索 objUser,那么在检索用户后立即将该用户附加到上下文确实没有意义。因此,我将这一行完全放在这里:

objContext.Attach(objUser);

另外 - 您可能只需要根据 _user 中的值在每个属性的基础上更新 objUser,而不是只分配整个属性目的。

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

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

First of all, if you already retrieve objUser from the objContext, there's really no point in attach that user to the context just after retrieving it. So I would drop this line here entirely:

objContext.Attach(objUser);

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 on objUser that are in fact different from the values in _user - shouldn't be too hard to create that method:

objUser.UpdateValuesFromOtherUser(_user);
objContext.SaveChanges();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文