2014-06-19 65 views
0

我有一個下載的生產數據庫,其中有一個空MigrationHistory表(內容被意外刪除)。使用空MigrationHistory表從現有生產數據庫遷移實體框架

我在我的開發環境中有一個更新的代碼模型(沒有先前的遷移)。

換句話說,下載的生產數據庫模式和開發環境代碼模型之間存在不匹配 - 並且它們之間沒有歷史記錄。

如何搭建代碼優先的遷移(或獲取SQL)以將生產數據庫更新爲新模型?

我曾嘗試以下,按照建議here

  1. 在我的項目啓用遷移(Enable-Migrations
  2. 添加一個空遷移(Add-Migration InitialCreate -IgnoreChanges
  3. 運用這一遷移(Update-Database

這會導致一行被添加到MigrationHistory表中。

但是,EF似乎認爲這意味着當前的代碼模型與數據庫模式相匹配(當然,這並不是)。

如果我嘗試添加新的遷移(Add-Migration UpdatedModel),則此遷移將變爲空白,因爲代碼模型和數據庫不匹配,所以不應該這樣遷移。

如何獲得反映代碼模型與數據庫模式之間更改的代碼優先遷移(或SQL)? (如果我試着做Add-Migration InitialCreate而沒有-IgnoreChanges標誌,我得到的是從頭開始創建的整個數據庫,正確地反映了代碼模型,但我希望進行更改。)

+0

您可以從源代碼控制中獲得您的代碼的舊版本,其中模型與當前生產數據庫匹配嗎?如果你不能玩MigrationHistory表,那麼'Model'列就是一個實際的EDMX文件,它已經被gzip然後Base64編碼。雖然不好玩! – DavidG

回答

1

指南中的第一步明確指出,需要一個與數據庫同步的模型。這是它失敗了。

你需要做的是:

  1. 暫時刪除當前的Code First模型(即備份當前模型的文件放在:文件系統,CVS)
  2. 反編譯代碼第一種模式從現有的DB
  3. 實現遷移,並創建初始遷移:Enable-Migrations

在這一步,你有你的同步數據庫和模型。再走幾步,你準備好去:

  • 替換原來的(你一直在上一步中的一個1)
  • 添加新的遷移模型Add-Migration
  • 更新您的DB:Update-Database
  • Tchan!你懂了!

    • get-help Enable-Migrations -examples
    • get-help Enable-Migrations -detailed
    • get-help Enable-Migrations -full
    :順便問一下,瞭解了遷移命令的每個參數,這樣做,在你的包管理器控制檯,使用任何的這個命令是非常重要的

    簡而言之:當您啓用遷移時,Code First模型和數據庫必須匹配。沒有其他方法可以執行此操作。這就是爲什麼您必須對數據庫進行反向工程以獲得初始同步,並從這一點開始工作。

    +0

    非常感謝你指出這一點。努力工作... – tremolo

    +0

    'update-migration'是'update-database'嗎? – MStodd

    +0

    @ MStodd,是的,好點。更正它。謝謝! – JotaBe