.NET Core數據庫模型在生產中發生變化

.net-core asp.net-core entity-framework-core

我遵循代碼第一種方法來生成EFCore的數據庫。現在,在開發過程中,我的一個模型發生如何在我們的客戶的實時系統上更新相應的數據庫表?我當然不想轉儲或刪除任何數據。

我還在使用.NET Core 1.1.0。

一般承認的答案

我擔心你不得不吞下藥丸。

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

在任何情況下,在應用/嘗試執行以下步驟之前,請先備份生產數據,然後在臨時服務器上進行預先嘗試。

一個敏感的選擇是......

  1. 恢復您的代碼(即返回VCS中的舊版本)
  2. 基於它創建表格佈局(運行Add-Migration InitialVersiondotnet ef migrations add InitialVersion然後dotnet ef migrations add InitialVersion Update-Databasedotnet ef database update
  3. 重新應用模型更改(返回到VCS中的當前版本,但將文件保留在Migration文件夾中)
  4. 運行Add-Migration ModelUpdateV2dotnet ef migrations add ModelUpdateV2
  5. 運行Script-Migration (感謝@Smit!)或dotnet ef migrations script 。這將生成用於將更改應用於架構的SQL命令

從現在開始,您有兩種選擇:

  1. 在開發數據庫中查找數據庫中的__EFMigrationHistory表。它應包含一個帶有初始遷移名稱的條目。將此表導出到生產系統中。然後,您的應用程序應該在下次啟動時應用遷移(當您在Startup.cs中調用context.Database.MigrateAsync() )。

    從現在開始,您應該能夠在將來使用遷移

  2. 只需從上面執行遷移腳本,而不復制__EFMigrationHistory ,但是您必須重複上述步驟。

另一個選擇是,始終從數據庫創建模型(請參閱dotnet ef dbcontext scaffold命令(請參閱EF Core Docs ),以便將來從數據庫模式創建模型。

然後,每次更改表時,都必須創建自己的SQL以進行遷移,並在部署應用程序之前或部署時應用它。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow