处置EntityFramework核心内存数据库实例

时间:2019-09-06 04:49:36

标签: c# entity-framework-core mstest ef-core-2.2

我正在使用EntityFrameworkCore进行单元测试,并创建一个新的内存数据库实例来运行测试。我希望每个测试独立运行并每次都建立数据库,但是内存数据库实例是在测试方法之间共享的,即使我每次都创建新的DbContext实例也是如此。

我在网上其他地方看到了一些潜在的解决方案,这些解决方案建议使用唯一命名的数据库实例,而另一些则建议覆盖服务提供商。我已经尝试过这两种方法,但仍然无法正常工作。

当我单独运行时,一切正常。当我选择要运行的多个测试时,第一个工作正常,随后的测试失败,并出现重复的主键错误。

我在下面粘贴了相关代码。有谁知道如何强制每次重新创建数据库?

    var serviceProvider = new ServiceCollection()
        .AddEntityFrameworkInMemoryDatabase()
        .BuildServiceProvider();

    var options = new DbContextOptionsBuilder<MyDbContext>()
        .UseInMemoryDatabase(Guid.NewGuid().ToString())
        .UseInternalServiceProvider(serviceProvider)
        .Options;

    var dbContext = new MyDbContext(options);

    dbContext.Store.AddRange(_testStores);
    dbContext.SaveChanges(); //blows up here on subsequent tests

    return dbContext;

0 个答案:

没有答案