简短的问题是,当Poco类具有主键字段的值时,是否可以使EF执行更新,否则插入?正是NHibernate的方式。
除非我弄错了EF方式真的很难看。
首先不是使用.Add(实体)来插入或更新你。添加插入和更新:
context.MyEntities.Attach(entity);
我试过了,但根本没有保存。阅读this后,我看到我错过了设置更改后的状态?但我的上下文没有ObjectStateManager所以我需要类似的东西:
var manager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
这对我来说似乎是一种非常复杂和不优雅的方法。我可以按照NHibernate的方式使EF工作吗? (如果不是我在项目中仍然足够早,我可以将EF删掉并重新使用NHibernate)
答案 0 :(得分:0)
您必须使用context.Add(entity)才能让Entity Framework知道它需要跟踪该对象的更改。如果实体已存在于上下文中,EF将自动跟踪对其的更改,并在调用context.SaveChanges()时将这些更改推送到数据库。
答案 1 :(得分:0)
您正在附加一个实体,因此您应该在savechanges之前尝试EntityState = Modified。