当我创建.NET Core5应用程序时,我通过执行Startup.Configure顶部的迁移代码来运行EF迁移(...)方法:
public class Startup
{
. . .
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
using (var scope = app.ApplicationServices.CreateScope())
{
ApplicationDbContext context = scope.ServiceProvider.GetService<ApplicationDbContext>();
context.Database.Migrate();
}
. . .
}
}这一切都运行得很好,直到我最近添加了一些托管服务,它们依赖于DB和迁移应用的更改。现在,如果我有需要在托管服务启动之前应用的迁移,我的应用程序在启动时崩溃,因为托管服务在迁移运行之前启动。
有没有办法解决这个问题?有没有办法在启动托管服务之前运行迁移?
发布于 2021-02-23 08:05:06
尽管我对.NET核心框架的了解还不够确定这是否会是一个问题,但经过一番折腾之后,这个解决方案似乎起作用了:
public class Program
{
public static void Main(string[] args)
{
IHost host = CreateHostBuilder(args).Build();
IServiceScopeFactory scopeFactory = host.Services.GetService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
ApplicationDbContext context = scope.ServiceProvider.GetService<ApplicationDbContext>();
context.Database.Migrate();
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}https://stackoverflow.com/questions/66309406
复制相似问题