1

在任何人將此標記爲重複之前,沒有任何類似於此的問題解決了我的任何疑慮或回答了我的任何問題。如何管理開發和生產數據庫之間的EF遷移?

我目前正在開發一個庫項目中的所有POCO和數據上下文,並從該項目中運行遷移。我正在更新的數據庫是開發數據庫。

如果我想將當前模式創建爲新的新數據庫,該怎麼辦?我想我所要做的就是在web.config中更改連接字符串並運行更新數據庫,對嗎?

生活/生產數據庫啓動並運行時,我想向模式添加新列和新表,並在開發中對其進行測試。因此,我將連接字符串切換回開發數據庫的連接字符串,並運行Update-Database。

在兩個數據庫之間來回切換似乎會在_MigrationHistory表和自動生成的遷移腳本之間發生衝突。

手動刪除兩個數據庫中的_MigrationHistory表和/或刪除/ Migrations中的遷移文件是否安全(因此我將再次運行Add-Migration)?我們如何管理這個?

回答

0

我會建議在源代碼庫中有一個獨立的主幹 - 一個指向生產,另一個指向開發,以避免在visual studio中切換兩者之間的風險。

2

如果我想將當前模式創建爲新的新數據庫,該怎麼辦?
- 是的,要創建新的數據庫到當前的遷移級別,只需修改連接字符串以指向尚不存在的數據庫並運行update-database。它將按順序運行所有遷移。

只要遷移到生產數據庫,我正在運行帶有-script開關的update-database命令以獲取原始sql,然後將該腳本手動應用到生產數據庫。如果您需要保留對數據庫運行的sql命令的記錄,這很有幫助。此外,您可以通過特定的遷移生成腳本,以便通過某些其他更新數據庫交換機遷移到另一特定遷移。

或者,你可以創建一個冪等腳本使用
–SourceMigration $InitialDatabase開關從任何遷移工作,並選擇指定用–TargetMigration

結束遷移如果刪除_MigrationHistory表,你將有問題,如果生成的腳本嘗試添加已存在的列等。

您可能會發現下面的鏈接有用:
Microsoft Entity Framework Migrations

0

我也有同樣的問題,即使使用同一個數據庫時 - 由於倉庫的一些合併,並自動/手動的搭配遷移。由於某些原因,EF沒有考慮到目標數據庫,並根據數據庫中已有的內容計算我需要執行哪些腳本。

爲了解決這個問題,我轉到目標數據庫的[__MigrationHistory]表並獲取最新的遷移名稱。這將幫助EF確定數據庫的狀態,並執行所需的腳本。

然後將下面的腳本運行:

update-database -script -sourcemigration {latest migration name}

這將創建更新腳本是具體到目標數據庫(在連接字符串應該是正確的,因爲在其他意見討論) 你也可以如果需要,使用-force參數

這種方式可以將任何數據庫更新到最新版本,如果它具有MigrationHistory表,則無論在哪個版本中找到它。

希望這有助於

0

我生產我的發展數據庫出去同步的,它給了我無窮的問題。我使用Red-Gate的工具來解決它,以匹配數據庫。使用該工具後,數據庫是完全一樣的,但我的遷移沒有工作,我開始得到奇怪的錯誤,即試圖添加已經存在的表/列等我解決了。我剛剛刪除了本地遷移文件夾,重新創建它,添加了初始遷移,更新了數據庫,然後將此遷移文件(本地)的數據與主機上的數據進行匹配(刪除遷移文件中的所有數據主機,並將與本地相同的數據添加到主機中)。更詳細的解釋是:

migration synch developmental and production databases

相關問題