2010-02-11 108 views
1

我在WinForms应用程序中使用EF,我的想法是每个事务都有一个ObjectContext,而不是一个长时间运行的上下文。但是,当我尝试将对象从以前的事务附加到新事务中时,出现错误,这与处于另一个上下文中的实体有关。实体框架 - ObjectContext处置时分离实体吗?

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

编辑

显然实体没有被上下文处理后分离为@ F.Aquino说,但做这样的事情似乎工作。虽然我不确定这是否是处理实体的正确方式。

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

基本上当我想重新连接到上下文的实体,我只是空实体的变化跟踪,然后只需将它连接到新的情境:也许有人会从这种可能出现的问题提出意见。它似乎工作正常。

回答

3

您必须手动分离它们,并牢记所有参考文献将在处理过程中处理。有这个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; 
    } 
}