4

非常簡要地之間管理EF的Code First遷移:通過Ladislav Mrnka開發和生產

當實現在EF遷移

我是基於文章建成的Code First現有項目實施EF遷移項目已投入生產,如何在應用於開發的更新和爲生產生成的腳本之間管理遷移腳本?

我感到困惑的原因是,爲每個腳本生成的MigrationId都附加了TimeStamp。在我的遷移嘗試中,我注意到在dev和prod的__MigrationHistory表中記錄的條目是不同的,因此引發了一個問題,如果數據庫要經歷不少遷移升級,那麼如果因任何原因需要降級,這將是非常困難的合作涉及的具體MigrationId使用update-database -script


非常簡單的過程,你創建一個用於創建__MigrationHistory表中$InitialMigration創建腳本。然後,對模型所做的任何更改都會被update-database後面的數據庫遷移。只要你有一個邏輯分組的模型改變批次,這個過程就會循環。

一看進入__MigrationHistory表顯示

+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
|   MigrationId    |  CreatedOn  |        Model        | ProductVersion | 
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
| 000000000000000_BootstrapMigration | 2012-03-01 17:40:39.567 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...CA7F54A20F50000 | 4.3.1   | 
| 201203011745335_AutomaticMigration | 2012-03-01 17:45:33.557 | 0x1F8B08000000400ECBD07601C49...HASH_TRUNCATED...F4AE3681EF50000 | 4.3.1   | 
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+ 
+0

您是如何實現prod和dev數據庫中的時間戳是不同的?你使用數據庫初始化器進行數據庫升級嗎? – 2012-03-05 21:06:13

+0

最初,在穩定版本上啓用遷移後,我運行'update-database'來創建帶有00_bootstrap條目的遷移表。現在我改變了模型並運行'Update-Database -Script'來生成Production DB的腳本,然後使用'Update-Database'來獲得Dev DB的遷移。現在執行Prod DB上前面步驟生成的sql會在MigrationsHistory表中創建一個條目作爲'TIMESTAMP01_AutomaticMigration',而Dev DB上的後續命令會在Dev DB中插入一個具有不同TimeStamp的條目,因爲2條命令是運行一段時間。 – bPratik 2012-03-06 01:13:44

回答

3

根據您的評論它看起來像解決方案是直線前進。如果你想有相同的時間戳必須使用Update-Database只有一次,在你的情況下,它意味着使用:

Update-Database -Script 

和執行創建的腳本在這兩個數據庫。

無論如何,我可能不會在預期降級的場景中使用自動遷移。對於每次遷移,我都會使用帶有明確名稱的基於代碼的遷移。在這種情況下MigrationHistory表中的每個記錄都應該具有唯一的名稱和時間戳應該沒有關係。

+0

啊,是的,同樣的腳本方法很有意義!我昨天所做的事更深入地討論了「添加遷移」,並創建了適當的變更腳本作爲帶有向上和向下塊的c#文件。 (http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx)。 非常感謝您的洞察力! – bPratik 2012-03-06 13:59:37