我正在使用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;