2012-03-15 12 views
6

我有一個問題,造成脫髮...如何停止EF(代碼優先)檢查模式變化

我有一個使用代碼優先(EF)的項目構建;一切都很好,它的功能就像一個魅力,但是,我無法找到一種允許數據庫更改(通過.sql腳本)的適當方式,因爲架構已更改,而不會在啓動時引發應用程序發脾氣。

我已經閱讀並閱讀了這個問題,我已經刪除了EdmMetaData表,因此它無法比較數據庫的哈希值,但後來發現EF中存在一個錯誤,如果刪除了它,它仍然認爲該模式已經改變了(因爲它不能識別缺失的表,所以它比較了一個空字符串!)。

此外,我已經嘗試在Global.asax文件中使用Database.SetInitializer(null),但這意味着我以後無法訪問數據模型。

每個人都在談論使用刪除數據庫的選項,如果架構更改等

這就是我在尋找:

對於EF /代碼首先做...什麼!甜蜜的FA!沒出息!

...如果我通過外部應用程序更改模式,我希望它完全忽略所做的更改,而只是假設我已做出相關模型更改以使用通過.sql腳本進行的這些數據庫更改。如果我想念一個專欄或一張桌子,那麼我接受我的愚蠢,然後我期望發脾氣,但是,直到我犯了一個錯誤,我希望EF相信我。

這意味着我可以隨時輕鬆地使用.sql腳本更新我們的任何客戶端,而不必擔心EF會讓山雀起飛! :(

任何想法傢伙?

+0

請解釋如果將數據庫初始值設定爲null會發生什麼情況。 – 2012-03-15 10:14:28

回答

5

除了設置初始化到null也添加到您的上下文類:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    model.Conventions.Remove<IncludeMetadataConvention>(); 
} 

它將關閉哈希比較

7

隨着越來越多的。最近的實體框架版本,你不再需要做Ladislav Mrnka所說的,自EF 4.3開始,你只需要將WebContext的初始化設置爲null即可,例如:

Database.SetInitializer<FabrikamFiberWebContext>(null);