2016-09-30 124 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

這是更好的答案,因爲它不依賴具有權限更改架構的數據庫用戶。 –