2017-08-17 69 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

只要你的内存数据库上下文中没有依赖关系一样,应该在处置被释放,可以在数据库连接或文件资源处置空置。当没有对象的引用时,超出范围的所有引用将自动收集。