存在Id值时的实体框架更新

时间:2013-08-09 14:58:33

标签: c# entity-framework nhibernate poco

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

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

首先不是使用.Add(实体)来插入或更新你。添加插入和更新:

context.MyEntities.Attach(entity);

我试过了,但根本没有保存。阅读this后,我看到我错过了设置更改后的状态?但我的上下文没有ObjectStateManager所以我需要类似的东西:

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

这对我来说似乎是一种非常复杂和不优雅的方法。我可以按照NHibernate的方式使EF工作吗? (如果不是我在项目中仍然足够早,我可以将EF删掉并重新使用NHibernate)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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