2014-09-22 54 views
1

我們有一些現有的應用程序將實體框架改造爲ORM。將實體框架與現有數據庫和空開發數據庫結合使用時的遷移

目的是爲了與遷移首先使用的代碼(從現有的數據庫),但我們有問題越來越遷移,以適應現有的數據庫場景:

  • 測試/生產數據庫中已經有所有表與代碼匹配。沒有遷移表雖然。
  • 一個空的localhost開發數據庫。

的目標

  1. 開發人員可以運行單元測試項目和數據庫將與所有表一起創造本身。
  2. 可以從遷移中生成一個腳本,該腳本將負責生成__migrationsHistory表以及生產所需的所有更改。

使用軟件包管理器可以使用默認遷移初始值設定項解決1。或者用ignore-changes開關解決2。但沒有成功,兩者同時工作。

我曾嘗試:

  • 添加遷移InitialCreate;添加遷移MigrationHistoryTable -ignore-changes;
    開發人員可以這樣做的想法是:update-database
    進入test/prod時,可以使用update-database -Script -SourceMigration:$ InitialDatabase生成腳本。問題是腳本會發現initialCreate遷移丟失並嘗試重新添加現有表。來自MigrationHistoryTable的源遷移不會添加遷移歷史記錄表,如果缺失(它位於test/prod中)。
  • 另一個嘗試是有兩個遷移項目,一個用於單元測試和另一個數據庫。雖然這變得有點麻煩。

還有其他建議嗎?

THX 金

回答

1

您可以使用實體框架電動工具extensions逆向工程將現有的數據庫轉換成代碼第一。在開發機器沒有數據庫做一個

add-migration Initial 

update-database 

,你將有模型匹配生產。編寫__MigrationHistory表和所有行並將它們添加到生產數據庫中。您的生產數據庫將準備好用於遷移生成的未來腳本。

命令

update-database -script -SourceMigration $InitialDatabase 

將產生用於更新數據庫的最新版本完整的腳本。它檢查__MigrationHistory表並逐行應用模式更改,以使模型與每個遷移中的更改匹配。

+0

您好Miniver,我正在尋找一個解決方案,EF可以幫助在這種情況下沒有手動腳本(或從數據庫自動生成)。如果沒有更好的建議,我會將其標記爲解決方案。 Thx Kim – 2014-09-23 06:43:29

+0

實體框架遷移功能都與該__MigrationHistory表相關聯。另一種方法是對數據庫進行逆向工程並在本地使用Entity Framework Migrations,然後使用[Sql Server Data Tools]中的Schema Compare工具(http://www.microsoft.com/en-us/download/details。 aspx?id = 36843),或者如果我不理解__MigrationHistory表在生產中,您可以更改您的連接字符串以指向生產並執行更新數據庫。 – 2014-09-23 12:04:43

+0

嗨Miniver,看起來你的第一個提議的解決方案是我們將要與之合作的解決方案。 Thx – 2014-09-25 09:02:41