发布 ASP.NET 个核心应用程序时自动执行迁移

Automatically execute migrations when publishing ASP.NET Core app

问题

在使用 Web 部署将我的 ASP 5 应用程序发布到 IIS 时,有什么方法可以自动执行迁移代码 (EF 7)?

我试过了

none 为我工作。

附加信息

我按照此 link 上的说明使用 Web 部署将我的 ASP 5 RC-1 Web 应用程序部署到 IIS。

在发布设置中这样做之后,我有:

在 ASP 4 个应用程序中使用 Web 部署我有其他数据库选项:

显然这个过程现在不起作用。 https://github.com/aspnet/Home/issues/622 发布后,您应该找到名为 "profile name"-publish.ps1 的强大 shell 脚本。然后将您的命令添加到靠近此文件末尾的这三行下方。您可能希望使用 powershell 来简化调试。

'Calling Publish-AspNet' |写详细

#调用Publish-AspNet执行发布操作

Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput

所以我在 ef database 命令中添加了选项 -environment。现在有效了:

"postpublish": ["dnx ef database update -e Staging"]

我有四个不同的 appsettings.json,每个环境都有不同的连接字符串。只需指明命令运行的环境即可。

使用context.Database.Migrate()

您可以从您的 Startup class:

中调用它
using (var context = new MyContext(...))
{
    context.Database.Migrate();
}

它将在应用程序启动时将您的数据库迁移到最新版本。但是要小心,也许注释掉这段代码,只有当你想运行你的迁移时才取消推荐。

在你Startup.csclass添加这段代码

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var context = serviceScope.ServiceProvider.GetService<AppDBContext>(); 
            context.Database.Migrate(); 
        }
    }