非常簡要地之間管理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 |
+------------------------------------+-------------------------+------------------------------------------------------------------+----------------+
您是如何實現prod和dev數據庫中的時間戳是不同的?你使用數據庫初始化器進行數據庫升級嗎? – 2012-03-05 21:06:13
最初,在穩定版本上啓用遷移後,我運行'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