如何使用 .NET 6 在 aspnet core Web 应用程序中执行 database.ensurecreated() ?

Man*_*ish 10 c# entity-framework-core asp.net-core .net-6.0

在.NET 5 Web应用程序中,我们在startup.cs中使用如下代码来使用实体框架初始化数据库:

using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
    var context = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
    context.Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)

但在 .NET 6 中,我收到没有 ApplicationServices 的错误。我尝试了此处提出的解决方案,但随后出现运行时错误:“无法从根提供程序解析作用域服务‘WebApplication1.DataAccess.SchoolDbContext’”。我的program.cs中的完整代码如下:

using WebApplication1.DataAccess;
using Microsoft.EntityFrameworkCore;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddJsonFile("appsettings.json");
builder.Services.AddRazorPages();

// Setup EF connection
// /sf/answers/3016870671/
// https://medium.com/executeautomation/asp-net-core-6-0-minimal-api-with-entity-framework-core-69d0c13ba9ab
builder.Services.AddDbContext<SchoolDbContext>(options => 
        options.UseSqlServer(builder.Configuration["Data:SchoolLocal:ConnectionString"]));

WebApplication app = builder.Build();

// /sf/answers/4988082851/
SchoolDbContext dbcontext = app.Services.GetRequiredService<SchoolDbContext>();
dbcontext.Database.EnsureCreated();
...
Run Code Online (Sandbox Code Playgroud)

帮助会很棒。

Gur*_*ron 21

WebApplicationbuilder.Build()由has属性返回 Services,该属性允许创建范围:

using(var scope = app.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<SchoolDbContext>();
    // use context
}
Run Code Online (Sandbox Code Playgroud)