代码之家  ›  专栏  ›  技术社区  ›  Pablote

实体框架-在ObjectContext释放时分离实体?

  •  1
  • Pablote  · 技术社区  · 15 年前

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

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

    编辑

    很明显,实体在上下文处理后并没有被分离,如@f.aquino所说,但这样做似乎是可行的。尽管我不确定这是否是处理实体的正确方法。也许有人会对可能由此产生的问题发表评论:

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

    基本上,当我想要将一个实体重新附加到一个上下文时,我只需将该实体的变更跟踪器设置为空,然后将其附加到新的上下文。它似乎工作得很好。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Francisco Aquino    15 年前

    您必须手动分离它们,并记住所有引用都将在该过程中被释放。就是这样 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;
        }
    }