2016-09-30 122 views
2

我是新来的迁移,我无法找到如何做我的变化到LiveDB。如何在生产中运行迁移

所以在开发的时候我添加到我的模式我做

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

但我做什么活?我希望我可以发布\部署生活和迁移将运行和更新架构,但我想不是:)

Live SQL服务器已关闭在它自己的世界我无法从我的访问它开箱即可更改连接字符串并再次执行更新数据库。

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

谢谢你,史蒂夫

+2

您可以为迁移生成一个脚本(https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#script-migration)。 – Jasen

+0

就是这样,thx先生!我希望我可以给你信贷作为回答,虽然... –

回答

5

已更新,更好的方式为核心2.0+

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

下面是一个例子:

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; 
    } 
} 

一个运行在1.x的迁移是只在应用程序启动时添加类似这样:

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

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

+0

当我在configure中运行它时抛出一个db连接错误,她为你工作? –

+0

是的,它的工作原理,问题是你的连接字符串,或者由于其他原因无法连接。 – juunas

5

感谢https://stackoverflow.com/users/2030565/jasen的答案

  1. 查看实时数据库表 “__EFMigrationsHistory” 为最后一次运行迁移
  2. PM>脚本迁移 - 摘自 “last_migration_name” 以诚“current_migration_name”
  3. 脚本生成,在线运行
+0

你也可以使用'Script-Migration -Idempotent'而不用担心最后一次运行迁移是什么。 – bricelam

+0

这是更好的答案,因为它不依赖具有权限更改架构的数据库用户。 –