entity framework – 在ObjectContext处理时分离实体?

我在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; } }