15

如何在EF(的Visual Studio 2012)禁用代碼優先功能如何禁用EF代碼優先功能(MVC4的Visual Studio 2012)

我使用Visual Studio 2012,MVC4(互聯網應用模板)。

我想使用EF,但不是用它的代碼優先功能。我希望應用程序出錯,而不是根據我的代碼創建或修改我的數據庫。 (我只是不能忍受這種感覺我的數據庫被改變幕後......我想讓應用程序使用我創建的確切分貝...如果有任何事情必須改變,我會做它我自己)

這是可能與新的Ef(VS2012)?

我已經看到很多人問這個問題,但到目前爲止我無法找到答案。

回答

23

可以使用代碼首先,確保當您通過設置數據庫初始化改變你的模型null數據庫永遠不會被更新或覆蓋:

Database.SetInitializer<MyDbContext>(null); 

這是Database類的靜態方法和應在應用程序的開始部分調用,例如在global.asax或您的上下文類的靜態構造函數中。這樣做必須手動更改模型類和數據庫模式,以便它們匹配。

您也可以使用Reverse Engineer功能從現有數據庫創建Code First模型。在此解釋:http://msdn.microsoft.com/en-us/data/jj200620

或者,如果你不想使用代碼首先,在所有與您可以使用數據庫首先方法的模型設計工作,這裏解釋:http://msdn.microsoft.com/en-us/data/jj206878

概述所有的可能的選項在這裏:http://msdn.microsoft.com/en-us/data/ee712907.aspx

+1

謝謝!我正在瘋狂地尋找現有的解決方案,試圖找出爲什麼Code First不起作用。在這篇文章之後,我在global.asax.cs中找到這段代碼 - > Database.SetInitializer (null); – shake

+0

所以這裏是我不明白的:在我的控制器中,我有一個包含上下文的私有字段。該字段通過無參數構造函數初始化,該構造函數包含上面的行。接下來,我被路由到一個控制器方法,當EF嘗試刪除數據庫時該方法崩潰。怎麼會這樣?是否與我調用Context的超級構造函數有關,我的Context類的名稱是字符串參數。 –