10

问题

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

我试过了

  • 在中project.json,我在中添加了这段代码scripts

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

没有一个对我有用。

附加信息

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

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

ASP 5 RC 1 使用 Web 部署发布到 IIS

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

ASP 4 使用 Web 部署发布到 IIS

4

4 回答 4

7

使用 context.Database.Migrate()

Startup你可以从你的班级调用这个:

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

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

于 2016-07-13T22:35:04.817 回答
1

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

'调用 Publish-AspNet' | 写详细

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

发布-AspNet -publishProperties $publishProperties -packOutput $packOutput

于 2016-02-14T22:20:16.580 回答
1

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

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

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

于 2016-02-16T21:06:07.600 回答
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(); 
        }
    }
于 2020-04-28T21:04:58.730 回答