2012-08-26 46 views
3

我正試圖在我的應用程序中找到適當的數據庫開發過程。我已經嘗試過使用Post/Pre部署腳本(非常好的功能),實體框架數據庫優先方法(每個數據庫更改放置在源代碼管理下的單獨腳本)的Visual Studio數據庫項目,現在我正在處理實體框架代碼優先做法。我不得不說,我對它提供的可能性印象深刻,但我正試圖弄清楚如何在開發過程中管理模型中的變化。假設我有以下的環境中我公司:代碼優先遷移 - 是否真的有必要?

LOCALHOST - 每個單個開發者, 測試 - 單機與測試目的, 生產SQL Server數據庫 - 單機與客戶端使用SQL Server數據庫

現在,每當我在處理應用程序和代碼更改時,每次我測試應用程序時(如LOCALHOST和TEST環境),都可以刪除並重新創建數據庫。我創建了合適的數據庫初始值設定項,爲數據庫提供測試數據,我對它們非常滿意。

但是,當模型發生變化時,每一個新的構建都要處理PRODUCTION數據庫的變化,這樣我就不會丟失整個數據。因此,在Visual Studio 2012中有「SQL Schema Compare」工具,我只是想知道是否不足以管理數據庫中PRODUCTION開發的所有更改?我可以將我的{本地}數據庫模式與PRODUCTION模式進行比較,並簡單應用所有更改?

現在,我想問一下Code First Migrations在這裏有什麼意義?爲什麼我應該通過它來管理數據庫中的所有更改?我能找到的唯一原因是允許執行各種「INSERT」和「UPDATE」命令。但是我認爲,如果數據庫設計正確,不應該有這樣的需要執行這些命令。 (這是另一個討論的話題,所以我不想詳述)。無論如何,我想問 - Code First遷移優於Code First + Schema Compare模式的真正優勢是什麼?

回答

3

它簡化了部署。如果您沒有在代碼中管理遷移,那麼您必須在生產環境中手動運行適當的增量腳本。藉助EF遷移,您可以配置應用程序以在啓動時自動將數據庫遷移到最新版本。

通常,在EF遷移之前,如果您想自動執行此操作,您需要在自定義安裝例程期間運行適當的增量腳本,或將一些基礎架構寫入應用程序,該代碼運行增量腳本。這需要知道當前的數據庫版本,以便知道哪些腳本要運行,哪些通常在DbVersion表中或類似的表中。藉助EF遷移,此管道已爲您準備好。

使用遷移意味着模型和數據庫更改的對齊是自動的,因此更容易管理。

+0

謝謝你的回答。你寫了「這將需要知道當前的數據庫版本」。事實上,當我使用SQL Schema Comparer時,我不需要知道任何關於生產數據庫的事情。我只是調整它以符合我的本地主機數據庫上定義的新模型結構。 更新數據庫時,我無法真正看到遷移優於SQL模式比較的優點。無論如何 - 我會嘗試在我的一個項目中使用它,看看它有什麼特別之處。 –

+0

在自動化遷移的生產環境中,您需要知道當前的數據庫版本。如果您部署到10個客戶端會發生什麼? 20? 100?如果客戶端本身可以在應用程序啓動時執行升級或通過「立即升級」菜單選項,會發生什麼情況? – devdigital

+0

啊,現在我明白了!:)我只適用於多租戶數據庫驅動的應用程序(主要是Web應用程序)。在這種情況下,我實際上只有三個數據庫來維護(本地主機,測試和所有客戶端的一個數據庫)。在這種情況下,我可以使用SQL模式比較工具(我猜)。但是,如果應用程序是單租戶,那麼像Code First Migrations這樣的功能的確可以顯着簡化部署。謝謝! –