有没有办法在内存数据库中创建一个单独的(隔离的)EF7实例?我在使用xUnit编写的单元测试中使用实体框架7中的内存数据库。我希望能够并行运行测试,但这并不可能,因为内存数据库中的所有测试似乎都是一样的。我想要的是每个测试都要在内存数据库中隔离,而不是与并行运行的其他测试共享。
答案 0 :(得分:7)
在EF Core中,您可以为InMemory数据库上下文传递数据库名称。
像
这样的东西var builder = new DbContextOptionsBuilder();
builder.UseInMemoryDatabase($"database{Guid.NewGuid()}");
答案 1 :(得分:0)
所以我还没有移动到EF7(仍然在EF6),但DbContext中存在内部单例的类似问题(我认为它是DbCompiledModel的缓存,我们的问题与映射有关)在运行时会有所不同,所以与你的不一样)。无论如何,尝试为每个测试集合显式创建这些。
如果您无法获得任何速度提升,则可以使用[Collection("Memory Database Tests")]
属性确保使用相同内存数据库运行的测试不会并行运行({{3 }})。