2013-08-27 74 views
0

我有一個現有的數據庫。爲了擺脫的「語境已經改變,因爲數據庫創建」與現有數據庫發生異常,我稱之爲Global.asax.cs中的的Application_Start()以下的建議在我讀:實體框架與現有數據庫 - 最新方法?

Database.SetInitializer<SomeEntities>(null); 

的問題是,我需要添加一行的Application_Start對於具有一些問題,每個現有的實體: -

  1. 如果我添加一個新entitity現有表,然後我需要記住在Application_Start()中調用它。問題是Application_Start從我添加的類中刪除,所以我傾向於忘記這個,這意味着我繼續觸發異常。
  2. 實體上的操作從它正在處理的實體代碼中移除,因此通過查看初始化程序爲空的實體類並不明顯。這是我一直遺忘的原因之一 - 因爲我沒有在我現有的課程中看到它。同樣,如果我刪除一個實體並從我的解決方案中刪除該類,我需要記住要在Application_Start中進行挖掘。
  3. 啓動代碼與Database.SetIntializer()調用混雜在一起。

理想情況下,我想在實體類(從DBContext派生)的構造函數中調用此函數。我嘗試以下,但它沒有工作:

Database.SetInitializer(false); 

所以,我的問題是,什麼是設置實體類(即從的DbContext派生類)中的初始化,而不是在的Application_Start的最佳途徑。也許是調用Database.SetInitializer的Entities類中的靜態構造函數?

如果Database.SetInitializer(假)在構造函數是正確的做法,然後我將與它堅持下去,看看我錯了。

回答

1

您放入Global.asax.cs的代碼可以被放入了Context靜態構造函數。

public class MyContext : DbContext 
{ 
    static MyContext() 
    { 
     Database.SetInitializer<MyContext>(null); 
    } 

    //... 
} 

參考hereherehere

+0

感謝,靜態構造函數是什麼,我會去用,但不知何故,我錯過了,表明這是最好的方式的引用。 – acarlon