我是迁移的新手,所以找不到将更改添加到LiveDB的方法。

所以在开发人员中,当我添加到模型中时

PM> add-migration <name>
PM> update-database


但是我该怎么办?我希望可以直接发布\部署并进行迁移,迁移将运行并更新架构,但我想不是:)

Live SQL服务器处于关闭状态,我无法从开发人员框中访问​​它,只需更改连接字符串并再次执行更新数据库即可。

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

谢谢,
史蒂夫

最佳答案

随样本更新为3.0

Core 3.0方法类似于2.x,但是现在使用了通用主机。
您需要为using Microsoft.Extensions.DependencyInjection;添加CreateScope()

public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();

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

    host.Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });




更新了Core 2.0+的更好方法

迁移应使用诸如EF Core CLI工具之类的工具在Program.cs中运行,该工具会在正常执行中运行启动功能。

这是一个例子:

public class Program
{
  public static void Main(string[] args)
  {
      var host = BuildWebHost(args);

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

      host.Run();
  }

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




在1.x中运行迁移的一种方法是在应用启动时仅添加以下内容:

public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ILoggerFactory loggerFactory,
            ShortenerContext db)
{
    db.Database.Migrate();
    //Rest omitted
}


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

09-18 03:48