2015-07-20 39 views
1

我做了一些計數相關記錄的擴展方法,我不想顯式傳遞DbContext,所以我得到ObjectContext並從中創建一個DbContext。如果它是從ObjectContext創建的,我是否需要處理一個DbContext?

將在原來的DbContext是部署新的DbContext得到安置?

var original = new CustomDbContext("connectionString") 
var entity = original.Table.First() 

// in the extension method 
var objectContext = entity.GetObjectContext() 
var newDbContext = new CustomDbContext(objectContext, false) 
// dispose of newDbContext?? 

// original caller 
original.Dispose() 
+0

做了一些測試,並且在處理原始連接後,從ObjectContext創建的DbContext不可用。 (「ObjectContext實例已被處置,不能再用於需要連接的操作。」) – Harold

回答

0

從對象上下文構造一個新的DbContext。當將dbContextOwnsObjectContext設置爲'true'時,在放置DbContext時將放置ObjectContext,否則調用方必須處理該連接。

通過將其設置爲false,因爲你有新的DbContext不會被佈置

編輯

這線軸更多的是ObjectContext的從dbContexts分別

 var objectContext = new ObjectContext("connectionString"); 
     var newDbContext1 = new CustomDbContext(objectContext, false); 
     var newDbContext2 = new CustomDbContext(objectContext, false); 

     newDbContext1.Dispose(); 
     newDbContext2.Dispose(); 
     objectContext.Dispose(); 
+0

嗯,有趣,因爲它設置爲false導致它不會被丟棄(像你說的),但不可用(例外是ObjectContext被處置)。你會推薦將它設置爲true嗎? – Harold

+0

將其設置爲true,處置新的上下文將處置舊的上下文。猜猜它設置爲false將是最好的我的用例,我不需要處置新的dbcontext。 – Harold

+0

OIC ...你是從一個單獨的ObjectContext創建多個DBContext,它是從一個init DBContext創建的?你會想創建一個'root'類型的ObjectContext,然後從該單個對象上下文中緩存DBContext ... – drooksy

1

經過一番研究,測試和檢查DbContext的源代碼我得出的結論並不是必需的。 DbContext只需要處理作爲傳遞的ObjectContext的包裝的內部上下文。

如果處置擁有該ObjectContext中的的DbContext,新的DbContext基本上將佈置。

相關問題