0

简短的问题是,当 Poco 类具有主键字段的值并且否则插入时,我可以让 EF 执行更新吗?正是 NHibernate 的方式。

除非我弄错了 EF 方式真的很丑。

首先,不要使用 .Add(entity) 进行插入或更新,而是使用 .Add 进行插入和更新:

context.MyEntities.Attach(entity);

我试过了,但什么都没有保存。读完这篇文章后,我发现我错过了设置更改的状态?但是我的上下文没有 ObjectStateManager 所以我需要类似的东西:

var manager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;

这对我来说似乎是一种非常复杂和不雅的方法。我可以让 EF 像 NHibernate 那样工作吗?(如果不是,我在项目中还足够早,我可以撕掉 EF 并重新使用 NHibernate)

4

2 回答 2

0

您必须使用 context.Add(entity) 以便实体框架知道它需要跟踪该对象的更改。如果实体已存在于上下文中,EF 将自动跟踪对其的更改,并在您调用 context.SaveChanges() 时将这些更改推送到数据库。

于 2013-08-09T15:01:59.043 回答
0

您正在附加一个实体,因此您应该在保存更改之前尝试 EntityState = Modified。

于 2013-08-09T15:13:38.220 回答