2012-07-07 116 views
0

我有點失落,我應該如何讓實體框架與自動遷移一起工作。我想:MVC3代碼優先:遷移並生成數據庫

  • 數據庫的時候它不存在
  • 的數據庫中自動創建的自動更新,當模型改變

對於我使用DbMigrator後者。這是相當緩慢的,所以我不希望運行它的每一個要求,也是我在同一應用程序的多個數據庫,所以它不能在的Application_Start走這就是爲什麼我把它在在session_start這樣的:

if (Session["started"] == null) 
    { 
     // this takes care of any database updates that might be necessary. 
     MigrationConfiguration configuration = new MigrationConfiguration(); 
     DbMigrator migrator = new DbMigrator(configuration); 
     List<string> pm = migrator.GetPendingMigrations().ToList(); 
     if (pm.Count > 0) 
     { 
      migrator.Update(); 
     } 
    } 
    else 
    { 
     Session["started"] = "started"; 
    } 

不知道這是否是正確的方式來執行它,但它似乎工作,但它不存在時實際上生成數據庫。它給了我一個「無法打開數據庫‘我有分貝

’由登錄請求」這與以下前的工作:

Database.SetInitializer<DbContext>(new InitializerIfModelChange()); 

這降低了數據庫,並生成種子數據是罰款當數據庫不存在,但它也是數據庫更改時觸發器(在這種情況下,我想DbMigrator來處理它)這是在Application_Start之前,但我不知道如何處理它。我擔心它會與DbMigrator衝突。我如何設定這一切,以實現前面描述的兩件事情?

回答

1

無論何時需要更改數據庫,我都會在包管理器中手動運行Update-Database。最初我使用Database.SetInitializer來創建數據庫,但現在已經註釋掉了。

結帳Entity Framework 4.3 Automatic Migrations Walkthrough獲得更高級的幫助。

這應該適用於你想要的,然後如果你需要創建一個新的數據庫,只需像你一樣添加Database.SetInitializer<NewDBContext>(new NewDBInitializer());,構建並運行。然後將其註釋掉,以便它在模型更改時不會運行,而是在程序包管理器中使用Update-Database命令。

相關問題