使用内存提供程序模拟EF核心的Dispose方法的必要性

时间:2017-08-17 16:13:46

标签: .net-core entity-framework-core dispose idisposable

背景

我正在使用一个使用Entity Framework Core的asp.net核心应用程序作为它的orm。对于单元测试,我在内存提供程序(Microsoft.EntityFrameworkCore.InMemory具体版本1.1.0)中使用microsoft来手动使用从我的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();
    }
}

为每个上下文创建一个新的内存数据库唯一。

我目前正在重写Dispose,不允许我检查目标方法写入的值,其中包含using(DBContext...,否则当我运行时,检查会抛出ObjectDisposedException在我的测试中断言。我目前有另一个名为clear的方法,我可以在base.Dispose中手动调用MockDBContext来调用。

问题

我的问题是,由于模拟数据库在内存中,我是否真的需要处理它?或者如果我不为每次测试clear内的try finally打电话,它会收集垃圾吗

1 个答案:

答案 0 :(得分:0)

只要您的内存数据库上下文没有像db连接这样的依赖项或者应该在dispose上释放的文件资源,就可以将dispose留空。当没有对象的引用时,将自动收集超出范围的所有引用。