2017-07-24 39 views
0

我遵循代碼優先方法通過EFCore生成我的數據庫。 現在在開發過程中,我的一個模型發生了變化。我怎樣才能在我們的客戶的實時系統上更新相應的數據庫表?當然,我不想轉儲或刪除任何數據。.NET核心數據庫模型在生產中的變化

我還在.NET Core 1.1.0上。

+0

您使用的遷移?或者'Database.EnsureCreated()'? – Tseng

+0

Database.EnsureCreated() – marrrschine

回答

3

我擔心你會不得不吞下藥片。

Database.EnsureCreated()僅用於開發,您不必保存數據。如果必須保留數據或更改表模式,則必須使用遷移或數據庫腳手架(從數據庫模式創建模型)。

無論如何,在應用/嘗試執行以下步驟並在臨時服務器上預先嚐試之前,請對生產數據進行備份。

一個棘手的選擇是......

  1. 恢復您的代碼(即要回你的VCS的舊版本)
  2. 基於它創建一個表佈局(在運行Add-Migration InitialVersiondotnet ef migrations add InitialVersion之後Update-Databasedotnet ef database update
  3. 重新應用模式的轉變(回到你的當前版本的VCS,但保持文件遷移文件夾)
  4. 運行Add-Migration ModelUpdateV2或(感謝@Smit!)或dotnet ef migrations script

    1. 尋找一個__EFMigrationHistory表你的開發數據庫數據庫內:你有兩種選擇,這將產生用於應用對架構更改

    從現在的SQL命令。它應該包含一個包含您的初始遷移名稱的條目。將此表導出到您的生產系統中。然後,應用程序應該將下一次啓動應用遷移(當您在Startup.cs中調用context.Database.MigrateAsync()時)。

    從現在起,你應該可以使用遷移在未來

  5. 只是從上面執行遷移腳本,而不復制過__EFMigrationHistory,但隨後你必須重複上述步驟。

另一種選擇是,始終從數據庫中創建的模型(見dotnet ef dbcontext scaffold命令(見EF Core Docs)就在未來創建數據庫架構模型。

,則每次更改表,你要創建自己的SQL遷移之前或同時部署應用程序應用之。

+0

非常感謝!非常有幫助! – marrrschine

+0

獲得腳本的等效powershell是'Scri PT-Migration' – Smit

相關問題