实体框架更新时';s是Id值

本文关键字:Id 框架 更新 实体 | 更新日期: 2023-09-27 18:26:58

简短的问题是,当Poco类有主键字段的值时,我能让EF执行更新吗?正是NHibernate的做法。

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

首先而不是使用.Add(实体)进行插入或更新。为插入和更新添加:

context.MyEntities.Attach(entity);

我试过了,但什么都没救。看完后我发现我错过了设置更改的状态?但是我的上下文没有ObjectStateManager,所以我需要这样的东西:

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

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

实体框架更新时';s是Id值

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

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