下面的集成测试中用到的 BlogSiteWebApplicationFactory 在 .NET 8 中正常
public class BlogSiteWebApplicationFactory : WebApplicationFactory<Program>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(
services =>
{
var efDescriptor =
services.Single(d => d.ServiceType == typeof(DbContextOptions<BlogSiteDbContext>));
services.Remove(efDescriptor);
var connection = new SqliteConnection("Filename=:memory:;Foreign Keys=False");
connection.Open();
services.AddDbContextPool<BlogSiteDbContext>(options => options.UseSqlite(connection));
});
}
}
升级到 .NET 9 后出现下面的错误
System.InvalidOperationException : Services for database providers 'Microsoft.EntityFrameworkCore.SqlServer', 'Microsoft.EntityFrameworkCore.Sqlite' have been registered in the service provider. Only a single database provider can be registered in a service provider. If possible, ensure that Entity Framework is managing its service provider by removing the call to 'UseInternalServiceProvider'. Otherwise, consider conditionally registering the database provider, or maintaining one service provider per database provider.
BlogSiteDbContext 的注册没有被成功移除
DbContextOptions 改成 IDbContextOptionsConfiguration 解决了