【问题标题】:Separate In Memory Databases EF7分离内存数据库 EF7
【发布时间】:2016-01-21 14:00:25
【问题描述】:

有什么方法可以创建一个单独的(隔离的)EF7 In Memory Database 实例?我在用 xUnit 编写的单元测试中使用 Entity Framework 7 中的内存数据库。我希望能够并行运行测试,但这实际上是不可能的,因为所有测试似乎都使用相同的内存数据库。我希望每个测试都将其隔离在内存数据库中,该数据库不与并行运行的其他测试共享。

【问题讨论】:

  • 能否请您将第一个答案标记为正确答案?

标签: xunit entity-framework-core


【解决方案1】:

在 EF Core 中,您可以为 InMemory 数据库上下文传递数据库名称。

类似

var builder = new DbContextOptionsBuilder();
builder.UseInMemoryDatabase($"database{Guid.NewGuid()}");

【讨论】:

  • 这太愚蠢了...但是如果它很愚蠢并且有效,那么它并不愚蠢。这太愚蠢了,它实际上有点天才!绝对 +1!
【解决方案2】:

所以我还没有迁移到 EF7(仍然是 EF6),但在 DbContext 中存在与内部单例类似的问题(我认为这是 DbCompiledModel 的缓存,我们的问题与会有所不同的映射有关在运行时,所以和你的不一样)。无论如何,尝试为每个测试集合显式创建这些。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多