【问题标题】:Entity Framework - Detaching entities when ObjectContext disposed?实体框架 - 处置 ObjectContext 时分离实体?
【发布时间】:2010-02-11 13:59:00
【问题描述】:

我在 WinForms 应用程序中使用 EF,我的想法是每个事务都有一个 ObjectContext,而不是单个长时间运行的上下文。但是当我尝试将前一个事务中的对象附加到新事务中时出现错误,这与实体已经在另一个上下文中有关。

我有点假设当对象上下文被释放时实体被分离,不是这样吗? (也许我没有在某处正确地处理上下文)。如果实体没有被分离,有没有办法这样做?

编辑

显然,正如@F.Aquino 所说,在上下文处理后实体并没有被分离,但这样做似乎可行。虽然我不确定这是否是处理实体的正确方法。也许有人可以评论可能由此产生的问题:

public void Attach(params EntityObject[] objects)
{
    foreach (EntityObject obj in objects)
    {
        ((IEntityWithChangeTracker)obj).SetChangeTracker(null);
        entities.Attach(obj);
    }
}

基本上,当我想将实体重新附加到上下文时,我只需清空实体的更改跟踪器,然后将其附加到新上下文。它似乎工作正常。

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    您必须手动分离它们,并记住所有引用都将在此过程中处理。这个great magical class 处理了在 EF 1 中重新附加实体的所有麻烦,作者是 Matthieu Mezil,用法类似于:

    public static EntityObject SaveOrUpdate(this EntityObject entity)
    {
        using (MyEntities context = new MyEntities())
        {
            entity.AttachGraph(context, () => new MyEntities());
            context.SaveChanges();
            return entity;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2013-03-07
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多