【问题标题】:Automatically execute migrations when publishing ASP.NET Core app发布 ASP.NET Core 应用程序时自动执行迁移
【发布时间】:2016-02-10 19:24:12
【问题描述】:

问题

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

我试过了

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

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

没有一个对我有用。

其他信息

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

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

在 ASP 4 应用程序中使用 web 部署我有额外的数据库选项:

【问题讨论】:

  • 请看我的回答。它可能对你有用。
  • 在哪里可以找到 project.json?

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


【解决方案1】:

使用 context.Database.Migrate()

你可以从你的Startup 类中调用它:

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

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

【讨论】:

  • 这样做要小心。如果您在本地有新的迁移,并且您的一位开发人员将他们的本地数据库连接字符串切换为远程连接字符串(如测试/暂存或更糟糕的产品),那么这将尝试在远程数据库准备好之前在远程数据库上运行新迁移。
  • @TroyGrosfield 有道理
  • 为什么@TroyGrosfield 可以访问生产服务器?
  • 我将为自动数据库部署创建测试项目并针对它运行测试。这个context.Database.Migrate() 方法有助于在我每次运行测试时恢复数据库。因为每次我在上面添加context.Database.EnsureDeleted(); 删除数据库时都需要创建新的数据库。
  • 在使用这种方法时我会非常小心,特别是在安全性不那么严格的地方,例如,首席开发人员可以访问生产数据库是很常见的。
【解决方案2】:

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

'调用 Publish-AspNet' |写详细

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

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

【讨论】:

  • 哪个进程? context.Database.Migrate()?
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    在你的 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(); 
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2019-10-26
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2017-07-26
      相关资源
      最近更新 更多