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

时间:2016-02-10 19:24:12

标签: asp.net-core webdeploy entity-framework-core ef-migrations webdeploy-3.5

问题

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

我试过

    {li}

    project.json中,我在scripts中添加了此代码:

    "scripts" : { "prepublish": ["dnx ef database update", "other commands..."], "postpublish": ["dnx ef database update"] }

没有人对我有用。

其他信息

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

在发布设置中执行此操作后,我有:

ASP 5 RC 1 publish to IIS using Web Deploy

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

ASP 4 publish to IIS using Web Deploy

4 个答案:

答案 0 :(得分:5)

使用context.Database.Migrate()

您可以从Startup课程中调用此内容:

using (var context = new MyContext(...))
{
    context.Database.Migrate();
}

它会在应用程序启动时将您的数据库迁移到最新版本。但要小心这样做,可能会注释掉这些代码,并且仅在您想要运行迁移时才推荐使用。

答案 1 :(得分:1)

显然这个过程现在不起作用。 https://github.com/aspnet/Home/issues/622发布后,您应找到名为“profile name”-publish.ps1的power shell脚本。然后在靠近此文件末尾的这三行下面添加命令。您可能希望使用powershell使其更容易调试。

'Calling Publish-AspNet'|写冗长

#call Publish-AspNet执行发布操作

Publish-AspNet -publishProperties $ publishProperties -packOutput $ packOutput

答案 2 :(得分:1)

所以我在我的-environment命令中添加了ef database选项。现在它起作用了:

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

我有四个不同的appsettings.json,每个环境都有不同的连接字符串。只需要指示命令工作的环境。

答案 3 :(得分:0)

在您的Startup.cs类中添加此代码

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