2014-09-04 48 views
1

我遇到EF6代碼優先遷移問題。無法在本地運行主服務器,因爲我的EF代碼優先遷移不同步

當我在一個較低的子分支中,我正在爲新事物做出我的開發變更外,我在該分支中進行了遷移,並且我的數據庫進行了這些更改。

當我切換到我的主分支(我不想合併),我嘗試在本地運行它時,我的遷移存在於我的數據庫中,但不在該代碼分支中。

我試圖做一個bug修復從主分支出去的生產和不想運行任何新的遷移作業,但它告訴我:

模型靠山「DummyDBContext」上下文有自 數據庫創建以來已更改。

我該如何解決這個問題?

回答

4

這裏真的有兩個問題。

  1. 存儲在數據庫(在_MigrationHistory表)的遷移歷史是不同步,您已經在主分支得到了遷移。這是導致InvalidOperationException被拋出的原因。
  2. 實際的數據庫模式現在與EF基於主分支中存在的遷移理解您的模式的方式不同步。根據您當前的代碼(在master中),模式應該看起來像您切換到subBranch並進行更改之前所做的。

最簡單的方法就是在切換回主機之前回滾'subBranch'遷移(通過調用Update-Database -TargetMigration [NameOfPreviousMigration])。不足之處在於,無論何時切換回subBranch,您都必須重新運行遷移。

否則,解決這個問題的方法是將意味着:

  1. 手動從_MigrationHistory表中刪除遷移的歷史。
  2. 通過將DbInitializer設置爲DropCreate(這將刪除數據庫中的所有數據,請注意此數據庫)或手動撤消對模式所做的任何更改,從而回滾對數據庫模式所做的任何更改遷移。 如果你確實走這條路線,那麼當你切換回subBranch時,你將需要重新從頭開始遷移。

好運;)