【问题标题】:ObjectStateManager vs Entry().StateObjectStateManager 与 Entry().State
【发布时间】:2017-01-11 17:01:35
【问题描述】:
这两者有什么区别,哪个更受欢迎?使用更改对象状态或Entry().state
db.ObjectStateManager.ChangeObjectState(employeeFromDB, EntityState.Modified)
对
context.Entry(employeeFromDB).State = EnitityState.Modified;
【问题讨论】:
标签:
entity-framework
entity-framework-4
entity-framework-6
【解决方案1】:
基本上,您是在 DbContext 类的底层 System.Data.Objects.ObjectStateManager 上调用一个函数来更改属性,而不是直接通过 DbContext 检索和更改它。
在第一个示例中,ChangeObjectState() 只能用于修改上下文中已存在的实体的ObjectStateEntry。如果您尝试修改不存在的内容,则会引发异常。
检查ObjectStateManager.ChangeObjectState中的异常
在第二个例子中,如果对象在它被添加的上下文中不存在,当你调用db.saveChanges() 时你仍然会得到一个异常,但是同样的方法可以用来添加一个新的记录,只需改变@ 987654326@转EntityState.Added
您还需要使用 ((IObjectContextAdapter)context).ObjectContext 从 DbContext 中获取底层 ObjectContext