首页 > 解决方案 > 使用 InMemoryDatabase 时是否需要 Dispose DbContext?

问题描述

在我的单元测试中,我使用带有InMemoryDatabase的 EF Core 2.2,例如:

var dbOptions = new DbContextOptionsBuilder<MyContext>().UseInMemoryDatabase("Foo").Options;
using (var context = new MyContext(dbOptions));
{
    // Do stuff..
}

使用UseInMemoryDatabase时我真的需要处理DbContext吗?阅读Jon Gallants 的博客后,我意识到即使使用真正的 SQL 数据库提供程序,Dispose()也并不总是需要这样做。DbContext使用 InMemoryDatabase 时处理的意义何在?我可以把它留给GC吗?

标签: c#entity-framework-core

解决方案


只要上下文没有像数据库连接或文件资源这样应该在 dispose 时释放的依赖项,您就可以省略 dispose。

所有超出范围的引用都会自动标记为垃圾回收。

从您的代码的外观来看,您有一个using块,在我看来这是一件好事,因为一旦正在运行的代码离开您的using块,Dispose就会被调用。


推荐阅读