如何在生产中运行迁移

时间:2016-09-30 17:24:53

标签: asp.net-core entity-framework-core

我是迁移的新手,我无法了解如何将更改添加到LiveDB中。

所以在开发时我添加到我的模型中

unset GLOBIGNORE

但是我在现场做什么?我正在希望我可以发布\ deploy to live并且迁移会运行并更新架构,但我猜不是:)

Live SQL服务器在其自己的世界中关闭我无法从我的开发框访问它只是更改连接字符串并再次执行更新数据库。

你们做什么,文档在哪里?

谢谢, 史蒂夫

3 个答案:

答案 0 :(得分:14)

  1. 检查数据库表" __ EFMigrationsHistory"找出最后一次运行迁移
  2. 在Visual Studio中,选择工具> NuGet包管理器>包管理器控制台
  3. 运行script-migration -From "last_migration_name" -To "current_migration_name"script-migration -idempotent
  4. Visual Studio将使用生成的SQL脚本打开一个新选项卡,在您的数据库上运行

答案 1 :(得分:11)

更新了Core 2.0 +的更好方法

由于工具在正常执行中运行启动功能的EF Core CLI工具,应该在Program.cs中运行迁移。

以下是一个例子:

std::

在1.x中运行迁移的一种方法是在app startup中添加类似的内容:

public class Program
{
  public static void Main(string[] args)
  {
      BuildWebHost(args).Run();
  }

  public static IWebHost BuildWebHost(string[] args)
  {
      var host = WebHost.CreateDefaultBuilder(args)
          .UseStartup<Startup>()
          .Build();

    using (var scope = host.Services.CreateScope())
    {
        var db = scope.ServiceProvider.GetService<ShortenerContext>();
        db.Database.Migrate();
    }

    return host;
  }
}

这将在启动时执行针对数据库的所有挂起的迁移。

答案 2 :(得分:0)

在您的启动方法中添加此代码

 using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var context = serviceScope.ServiceProvider.GetService<AppDBContext>(); 
            context.Database.Migrate(); 
        }

这将执行和更新生产中的所有迁移