ObjectStateManager vs Entry()。State

时间:2014-10-07 03:57:16

标签: entity-framework entity-framework-4 entity-framework-6

这两者有什么区别,哪个更受欢迎?使用更改对象状态或Entry().state

db.ObjectStateManager.ChangeObjectState(employeeFromDB, EntityState.Modified)

VS

context.Entry(employeeFromDB).State = EnitityState.Modified;

1 个答案:

答案 0 :(得分:2)

基本上,您正在调用DbContext类的基础System.Data.Objects.ObjectStateManager上的函数来更改属性vs直接通过DbContext检索和更改它。

在第一个示例中,ChangeObjectState()只能用于修改上下文中已存在的实体的ObjectStateEntry。如果您尝试修改不存在的内容,则会引发异常。

检查ObjectStateManager.ChangeObjectState

中的例外情况

在第二个示例中,如果对象在上下文中不存在,那么当您调用db.saveChanges()时,您仍会遇到异常,但可以使用相同的方法添加只需将EntityState.Modified更改为EntityState.Added

即可创建新记录

您还需要使用((IObjectContextAdapter)context).ObjectContext

从DbContext中获取基础ObjectContext