2012-07-07 110 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命令。

相关问题