内存数据库 EF7 分离

8

有没有办法创建一个独立(隔离)的EF7内存数据库实例?我在使用xUnit编写的单元测试中使用Entity Framework 7中的内存数据库。我想能够并行运行测试,但这似乎不太可能,因为所有测试似乎都使用相同的内存数据库。我希望每个测试都有自己的隔离内存数据库,不与并行运行的其他测试共享。


请问您能否将第一个答案标记为正确的答案? - TweeZz
2个回答

9
在EF Core中,您可以为InMemory db上下文传递一个数据库名称。
类似于以下内容:
var builder = new DbContextOptionsBuilder();
builder.UseInMemoryDatabase($"database{Guid.NewGuid()}");

这很愚蠢...但如果它很愚蠢却能够运行,那么它就不是愚蠢的。这很愚蠢,实际上有点天才!绝对+1! - Konrad Viltersten

0

所以我还没有转移到EF7(仍在EF6),但是DbContext中的内部单例存在类似问题(我认为它是DbCompiledModel的缓存,我们的问题与运行时变化的映射相关,因此不完全与您的问题相同)。无论如何,尝试为每个测试集显式创建这些。

如果您没有获得值得努力的速度提升,可以使用[Collection("Memory Database Tests")]属性确保运行相同内存数据库的测试不会并行运行(https://gist.github.com/bradwilson/8423477)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接