2012-07-04 60 views
0

我与实体框架4.3迁移久矣发挥创建一个新的数据库,但我有麻烦达到下一个问题:万一我的代码运行在一个现有的数据库,我希望数据库自动迁移到最新版本,但如果数据库不存在,应该从迁移中自动创建数据库。实体框架4.3.1迁移 - 启用自动迁移,并在同一时间

我认为问题与您创建的第一个迁移有关。如果使用-IgnoreChanges参数创建第一个迁移(或者按照此处所述手动删除它们:http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/),则无法使用迁移来使用DbMigrator类创建新表。因为你没有最初的迁移。如果您在不使用-IgnoreChanges的情况下创建第一个迁移,则不可能迁移现有数据库。有没有人有解决这个问题的办法?

回答

0

所以你现有的数据库,并要对数据库中你想支持新部署的情况下,由移民创建数据库,同时使用迁移?

它看起来有点不受支持的用例。在这种情况下最简单的(未测试)将是由某些AppSettings键驱动的条件编译或条件迁移。这意味着创建初始迁移,如果你没有数据库,修改最多的方法:

public override void Up() { 
    if (ConfigurationManager.AppSettings["NewDatabaseRequired"] == "true") { 
     // Here is generated content 
    } 
} 

public override void Up() { 
#if NewDatabaseRequired 
    // Here is generated content 
#endif 
} 

还有很多其他更复杂的选项,包括脚本当前的数据库,修改如果表已存在,则脚本结束,将脚本作为资源添加到迁移程序集,然后执行Up方法中使用-IgnoreChanges生成的脚本。

作为另一个选项可以打开附加的数据库连接,并检查迁移表已经存在(通过查询在SQL Server sys.tables视图)。这不需要生成脚本。