实体框架 - 在ObjectContext处理时分离实体?

时间:2010-02-11 13:59:00

标签: c# .net entity-framework

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

我有点假设当对象上下文被处理时实体被分离,是不是这种情况? (也许我不会在某处正确处理上下文)。如果实体没有脱离,有没有办法处理?

修改

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

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

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

1 个答案:

答案 0 :(得分:3)

您必须手动分离它们,并记住所有引用都将在此过程中处理。有这个great magical class处理由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;
    }
}