繁体   English   中英

实体框架-处置ObjectContext时是否分离实体?

[英]Entity Framework - Detaching entities when ObjectContext disposed?

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

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

编辑

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

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

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

您必须手动分离它们,并记住所有引用将在处理过程中被处理。 Matthieu Mezil有一个很棒的神奇类 ,可以解决EF 1中重新附加实体的所有麻烦,用法类似于:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM