2011-05-10 74 views
15

我剛開始學習.NET MVC,所以這可能是一個愚蠢的問題,但我還沒有找到一個好的答案。在生產環境中使用DropCreateDatabaseIfModelChanges

我遵循使用實體框架爲我構建數據庫的代碼優先方法。我在Application_Start()方法中包含了以下內容,以便允許通過更改我的Model對象來編輯我的數據庫。

Database.SetInitializer<ContactManagerDB>(new DropCreateDatabaseIfModelChanges<ContactManagerDB>()); 

我只是想知道如果我把這個應用到生產環境,然後做出我的模型進行一些更改,會發生什麼,然後更新應用程序?這真的會在生產環境中下降並重新創建數據庫嗎?

推進生產環境變更的最佳做法是什麼?使用Code First方法?

+3

我已經包裹在#if DEGUG塊中了..我認爲應該停止任何whoopsie時刻! :P – 2011-11-24 09:46:34

+0

僅供參考,但SetInitializer中的類型說明符是多餘的,可以省略。 – heisenberg 2012-01-10 14:05:36

回答

1

您可以刪除生產環境中的EdmMetadata表。在這種情況下,EF不會知道當前模式與新模式進行比較,因此它只會假定您知道自己在做什麼,並且不會觸及數據庫模式。

18

DropCreateDatabaseIfModelChanges只能在開發時使用,而不能在生產計算機上使用。如果您推送到生產機器並對模式進行更改,則會丟失所有數據。

+1

如果模型更改,使用.Seed方法對數據執行任何「升級」不是一個好的地方嗎?謝謝! – 2012-01-24 00:43:20

0

代碼首先不能升級數據庫,同時保持數據不變。