gpt4 book ai didi

entity-framework - 强制 EF 4.1 Code First 将附加实体视为已修改

转载 作者:行者123 更新时间:2023-12-03 11:51:52 25 4
gpt4 key购买 nike

我发现的所有示例都引用了一个名为 ObjectContext 的类,该类在 CTP5 中似乎不存在。在这一点上我必须强调,CTP5 是我第一次接触 Entity Framework 。

我有一个已连接到我的 DbContext 的断开连接的 POCO。虽然 SaveChanges 没有接受更改,但我如何告诉我的上下文来更新该实体?

_context.Users.Attach(user);
// The user has been replaced.
_context.SaveChanges();
// The change is not saved.

我究竟做错了什么?

2011 年 12 月 1 日更新
对大多数人来说可能很明显,但是作为 EF 的第一次用户,我没有想到附加一个已经附加的对象会清除以前的状态。这给我带来了很大的痛苦。但是我想以一种非常通用的方式使用存储库模式,这种方式不关心对象是否已经附加或者是由于 ASP.NET MVC 绑定(bind)而新创建的。所以我需要一个 UpdateUser方法,我附在下面。
    public User UpdateUser(User user) {
if (_context.Entry(user).State == EntityState.Detached) {
_context.Users.Attach(user);
_context.Entry(user).State = EntityState.Modified;
}
return user;
}

该方法显然假设对象以某种方式存在于数据存储中,它被称为 UpdateUser毕竟。如果对象已附加,您将受益于对象的先前状态,这反过来将允许对 DB 进行优化更新。但是,如果没有附加对象,该方法会强制整个对象变脏。

现在看起来很明显,以前没有。希望它可以帮助某人。

富有的

最佳答案

当您附加一个实体时,它会进入未更改状态(自从它附加到上下文后它没有被更改)。您只需将实体状态显式更改为已修改:

_context.Users.Attach(user);
_context.Entry(user).State = System.Data.Entity.EntityState.Modified;
_context.SaveChanges();

关于entity-framework - 强制 EF 4.1 Code First 将附加实体视为已修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com