У меня есть проект ASP.NET Core 2.2 WebApi, в котором также используется EF Core 2.2. Проект протестирован с помощью интеграционных тестов с WebApplicationFactory<T>
.
. Я попытался перенести проект web api в netcore / aspnetcore 3, который сработал очень хорошо. Я наткнулся на миграцию тестов.
У меня есть следующий код, который работал в aspnetcore 2.2:
public class MyServiceWebHostFactory : WebApplicationFactory<Service.Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
var serviceProvider = new ServiceCollection()
.AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
services.AddDbContext<MyContext>((options, context) =>
{
context.UseInMemoryDatabase("MyDb")
.UseInternalServiceProvider(serviceProvider);
});
var sp = services.BuildServiceProvider();
using var scope = sp.CreateScope();
var scopedServices = scope.ServiceProvider;
// try to receive context with inmemory provider:
var db = scopedServices.GetRequiredService<MyContext>();
// more code...
// Ensure the database is created.
//db.Database.EnsureCreated();
// more code...
});
}
}
Он заменяет EF Core DbContext на DbContext, используя InMemoryProvider.
После перехода на 3.0 он больше не заменяется. Я всегда получаю DBContext с настроенным SQL Server.
Если я удаляю вызов services.AddDbContext<MyContext>(options => options.UseSqlServer(connectionString))
в ConfigureServices
приложения (Service.Startup
), это работает, но это не решение.
Я также попробовал services.RemoveAll(typeof(MyContext))
перед регистрацией контекста памяти, который тоже не работает.