2017-08-17 64 views
0

背景必要性Dispose方法的嘲笑EF核心與內存供應商

我正在使用實體框架的核心,因爲它的ORM一個asp.net核心應用。對於單元測試,我使用Microsoft內存提供程序(Microsoft.EntityFrameworkCore.InMemory特別是版本1.1.0)手動模擬數據庫與從我的DBContext派生的類。

MockDBContext.cs:

public class MockDBContext:DBContext{ 
    public MockDBContext:base(
     new DbContextOptionsBuilder<DBContext>().UseInMemoryDatabase(
      Guid.NewGuid().ToString() 
     ).Options 
    ){} 
    public override void Dispose(){} 
    public void clear(){ 
     base.Dispose(); 
    } 
} 

在內存數據庫中的新的獨特之處在於爲每個上下文創建。

我現在正在重寫處置不做任何事情來允許我檢查目標方法編寫的值,其中有using(DBContext...,否則當我在測試中運行斷言時,檢查會拋出ObjectDisposedException。我目前有另一種方法稱爲clear,我可以手動撥打電話base.DisposeMockDBContext

問題

我的問題是,由於模擬數據庫是在內存中,我是不是真的需要處理呢?還是會得到垃圾回收,如果我不叫clear一個try finally內爲每個測試打擾

回答

0

只要你的內存數據庫上下文中沒有依賴關係一樣,應該在處置被釋放,可以在數據庫連接或文件資源處置空置。當沒有對象的引用時,超出範圍的所有引用將自動收集。