c# - 使用扩展方法 (EF5) 恢复 DbContext.Detach() 方法

标签 c# .net entity-framework entity-framework-5

<分区>

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 , AddedDeleted始终只作用于提供的对象,而不作用于相关对象。这也是调用 Detach 的情况。 ObjectContext的方法| .更重要的是仅通过将状态设置为 Detached 来分离对象与其他状态更改的行为一致,因为与设置任何其他状态一样,它只会影响提供的对象而不会影响相关对象。

DbContext是 - 除其他功能外 - 旨在使使用 Entity Framework 更容易。老Detach方法更令人困惑,其行为也不像许多开发人员所期望的那样。 (Herehere 是关于这种困惑和分离对象所涉及的复杂性的两个引用。)在我看来,从 DbContext 中删除它并不是错误的步骤。 API。

好吧,您始终可以像以前一样编写自己的扩展方法或访问底层 ObjectContext如果你真的想要一个 Detach,可以通过适配器方法。

关于c# - 使用扩展方法 (EF5) 恢复 DbContext.Detach() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689398/

相关文章:

.net - .NET HttpWebRequest 中的压缩( header )错误?

c# - EF急切加载导航属性问题

c# - 在 Entity-Framework 中使用更新的 DatabaseGeneratedOption 迁移实体

c# - 使用正则表达式提取特定值

.net - 什么对 REST API 更好? WCF Web API(预览版 4)或 OpenRasta 或其他什么?

c# - 对象在使用 web api 发出请求时未正确反序列化

c# - 在 C# 中地理定位 IP 地址

WCF 数据服务或 Entity Framework

c# - excel中的键盘快捷键csv文件列标题宽度自动调整

c# - 修剪字符串以添加特殊和非数字字符