2016-05-15 65 views
2

我正在使用實體框架6的MVC 5,自動遷移被禁用,沒有種子被使用,我正在腳本化我的更新到生產。實體框架6剛刪除我的數據庫?

我會舉起手來說我對MVC和EF相當陌生。

我剛上傳了一個新的代碼庫到生產環境中,忘記了模型已經改變。當我去登錄到新版本時,它會拋出錯誤頁面。好吧,我忘了編寫最新的遷移腳本 - 我這樣做了,連接到SSMS,發現數據庫沒有了。

輕微的恐慌,從備份恢復(我不是那麼愚蠢!)並應用遷移,一切都開始工作,因爲它應該。

爲什麼我的代碼在模型更改時刪除整個數據庫?如上所述,自動遷移被禁用,並且這種行爲在開發機器上不會發生,它們會拋出有關已更改模型的錯誤。


編輯補充:雖然看着費爾南達的回答初始化模式,他們沒有說「刪除數據庫,然後什麼也不做」。我的數據庫被丟棄了,MDF和LDF消失了,沒有任何事情是SSMS,沒有任何東西被重新創建。如果一個空白數據庫在它的位置被創建,我會理解更多。也就是說,用戶帳戶在數據庫上有DBO但不是主數據庫,所以可以刪除數據庫但不能創建新數據庫?

+1

我不知道答案,但我總是確保將'Database.SetInitializer (null);'放在我的上下文類的OnModelCreating()中。 –

+0

似乎謹慎。我覺得我的驚訝之處在於它不會在任何開發環境中發生。 – RemarkLima

回答

2

在代碼優先閱讀本有關數據庫初始化策略:

http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

檢查你的DbContext初始化,並確保該選項DropCreateDatabaseIfModelChanges是評論

//Database.SetInitializer(new DropCreateDatabaseIfModelChanges( ));

+0

我沒有初始化程序集,所以我認爲它是默認的'CreateDatabaseIfNotExists' - 這是我在開發環境中看到的確切行爲。 – RemarkLima

+0

您也可以在配置文件中設置db初始值設定項。檢查每個環境。都是平等的嗎? –

+0

你的意思是Web.config? – RemarkLima