首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有办法在托管服务启动前运行实体框架迁移

是否有办法在托管服务启动前运行实体框架迁移
EN

Stack Overflow用户
提问于 2021-02-22 10:44:48
回答 1查看 145关注 0票数 1

当我创建.NET Core5应用程序时,我通过执行Startup.Configure顶部的迁移代码来运行EF迁移(...)方法:

代码语言:javascript
复制
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和迁移应用的更改。现在,如果我有需要在托管服务启动之前应用的迁移,我的应用程序在启动时崩溃,因为托管服务在迁移运行之前启动。

有没有办法解决这个问题?有没有办法在启动托管服务之前运行迁移?

EN

回答 1

Stack Overflow用户

发布于 2021-02-23 08:05:06

尽管我对.NET核心框架的了解还不够确定这是否会是一个问题,但经过一番折腾之后,这个解决方案似乎起作用了:

代码语言:javascript
复制
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>();
            });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66309406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档