2010-02-11 89 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; 
    } 
}