Entity framework 4.3 实体框架4.3.1迁移—启用自动迁移并同时创建新数据库

Entity framework 4.3 实体框架4.3.1迁移—启用自动迁移并同时创建新数据库,entity-framework-4.3,entity-framework-migrations,Entity Framework 4.3,Entity Framework Migrations,我使用Entity Framework 4.3迁移已经有一段时间了,但我很难实现下一个行为:如果我的代码在现有数据库上运行,我希望数据库自动迁移到最新版本,但如果数据库不存在,则应该从迁移中自动创建数据库 我认为问题与您创建的第一次迁移有关。如果使用-IgnoreChanges参数创建第一个迁移,或者按照此处的说明手动删除它们,则将无法使用迁移来使用DbMigrator类创建新表。因为您没有初始迁移。如果在不使用-IgnoreChanges的情况下创建第一次迁移,则无法迁移现有数据库。有人对此问

我使用Entity Framework 4.3迁移已经有一段时间了,但我很难实现下一个行为:如果我的代码在现有数据库上运行,我希望数据库自动迁移到最新版本,但如果数据库不存在,则应该从迁移中自动创建数据库


我认为问题与您创建的第一次迁移有关。如果使用-IgnoreChanges参数创建第一个迁移,或者按照此处的说明手动删除它们,则将无法使用迁移来使用DbMigrator类创建新表。因为您没有初始迁移。如果在不使用-IgnoreChanges的情况下创建第一次迁移,则无法迁移现有数据库。有人对此问题有任何解决方案吗?

因此,您有现有的数据库,并且希望在该数据库上使用迁移,同时希望在新部署时支持通过迁移创建数据库

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

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

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

作为另一个选项,您可以打开其他数据库连接,并通过查询SQL Server中的sys.tables视图来检查迁移中的表是否已经存在。这将不需要生成脚本

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