2012-07-20 39 views
0

我已經使用Nuget Package Manager中的MVCScaffolding,並遵循關於它如何工作的簡短教程。 它似乎很簡單,當我運行 Scaffold Controller Team –Repository -Force它將創建圍繞「團隊」的所有存儲庫模式的東西。MVCScaffolding和數據庫同步不斷變化的模型

但是,在嘗試(併成功)解決這個問題時,我決定在「團隊」類(myRandomField)中添加一個附加字段。 如我所料,當我整理我的MVC視圖中的錯誤,是:

自數據庫創建的模型支持的「MvcApplication1Context」已經時過境遷。可以手動刪除/更新數據庫,也可以使用IDatabaseInitializer實例調用Database.SetInitializer。例如,DropCreateDatabaseIfModelChanges策略將自動刪除並重新創建數據庫,並可以選擇使用新數據對其進行種子處理。

很明顯,這個錯誤是因爲我已經更新了模型(Code-first ??),並且數據庫現在與我的模型「不同步」。

解決此問題的最佳方法是什麼?是否有一種簡單的方法需要與模型進行數據庫同步 - 我計劃對模型進行大量編輯,因爲我開始的項目將逐步推出(因此,每次完成一次完整的數據庫重建都不成問題)在這種情況下,代碼首先適合我嗎?我真的很喜歡這個插件/工具不會使用它。

+0

jad - 讓我瞭解這裏的基礎知識。您是否希望在不丟失現有數據的情況下同步數據庫,或者您是否樂意看到這些更改會丟棄所有現有數據?如果前者,那麼我會在回答中解決,否則,只需使用Database.SetInitializer(新的DropCreateDatabaseIfModelChanges ());'在你的global.asax – 2012-07-20 14:44:27

+0

@jimtollan正確,我不想失去現有數據。 – JustAnotherDeveloper 2012-07-20 15:02:26

回答

3

JAD,

在我的評論中提到以上,如果你是「快樂的」失去你的數據庫中的所有數據exisiting

,那麼你可以添加以下到您的Global.asax:

[Conditional("DEBUG")] 
private static void InitializeDb() 
{ 
    using (var db = new YourContext()) 
    { 
     // double indemnity to ensure just sqlserver express 
     if (db.Database.Connection.DataSource != null 
      && db.Database.Connection.DataSource.IndexOf("sqlexpress", 
      StringComparison.InvariantCultureIgnoreCase) > -1) 
     { 
      // Initializer code here 
      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<YourContext>()); 
     } 
    } 
} 

然後從Application_Start()調用此方法,即

protected void Application_Start() 
{ 
    InitializeDb(); 
    ViewEngines.Engines.Add(new MobileViewEngine()); 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 

,如果你想保留的數據,那麼你就必須使用數據遷移工具。我使用紅門工具(SQL Comparison Bundle)來執行此操作。基本上,這將查看您的新架構和舊架構,並將現有數據遷移到新架構中,以備測試和部署,而無需接觸原始數據庫文件。

我認爲這應該適合你。

+0

雖然這不適合我的需要,但對於遷移建議+1和僅使用調試數據庫初始化的+1。 – JustAnotherDeveloper 2012-07-26 12:38:55

+0

jad - 不用擔心。是的,[有條件的(「DEBUG」)]裝飾器在這樣的場合是一個夢幻般的救星。容易最終吹走活的prod數據庫否則:-) ouch ... – 2012-07-26 12:50:13

+0

#if調試代碼 – JustAnotherDeveloper 2012-07-26 12:55:57