2

我试图在我的 Program.cs 文件中的应用程序启动时调用 EF Core 方法,使用 .NET 6 最小 API 模板并收到以下错误:

System.InvalidOperationException:'无法从根提供程序解析范围服务'Server.Infrastructure.DbContexts.AppDbContext'。'

// ************** Build Web Application **************

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(configuration.GetConnectionString("AppDb:Postgres")));

// ...

// **************** Web Application *****************

var app = builder.Build();

var dbContext = app.Services.GetService<AppDbContext>(); // error thrown here

if (dbContext != null)
{
    dbContext.Database.EnsureDeleted();
    dbContext.Database.Migrate();
}

// ...

对于早期版本的 .NET Core,我知道我可以在Configure方法中获取 DbContext,但是如何使用这种方法获取服务?

4

1 回答 1

1

范围服务需要解析范围。您可以通过以下方式创建范围ServiceProviderServiceExtensions.CreateScope

using(var scope = app.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    // use context
}
于 2021-12-16T23:02:39.900 回答