Entity Framework 5 中的 DbContext
上没有 Detach(object entity)
。
要分离实体,现在需要更改状态。也许我遗漏了一些东西,但这似乎比使用 Detach
方法更不直观和可读:
context.Entry(myEntity).State = EntityState.Detached;
我很想创建一个扩展方法来恢复 Detach 方法:
public static void Detach(this MyEntities context, object entity)
{
context.Entry(entity).State = EntityState.Detached;
}
Microsoft 删除 EF 5 中的 DbContext.Detach() 方法的原因是什么?
删除 Detach
( DbContext
) API 中的方法有一些逻辑,因为 Detach
不对对象图进行操作,但它只会分离您传递给方法的单个对象。这与更改对象状态的所有其他方法不同:
-
Attach
附加提供的对象,包括导航属性对象图中的所有相关对象
-
Add
将提供的对象(包括所有相关对象)添加到上下文中
-
Remove
删除提供的对象,包括已配置为级联删除的相关对象
另一方面,手动将状态设置为 Modified
, Added
或 Deleted
始终只作用于提供的对象,而不作用于相关对象。这也是调用 Detach
的情况。 ObjectContext
的方法| .更重要的是仅通过将状态设置为 Detached
来分离对象与其他状态更改的行为一致,因为与设置任何其他状态一样,它只会影响提供的对象而不会影响相关对象。
DbContext
是 - 除其他功能外 - 旨在使使用 Entity Framework 更容易。老Detach
方法更令人困惑,其行为也不像许多开发人员所期望的那样。 (Here 和 here 是关于这种困惑和分离对象所涉及的复杂性的两个引用。)在我看来,从 DbContext
中删除它并不是错误的步骤。 API。
好吧,您始终可以像以前一样编写自己的扩展方法或访问底层 ObjectContext
如果你真的想要一个 Detach
,可以通过适配器方法。