【问题标题】:Entity Framework 4.3.1 Migrations - enable automatic migration and creating a new database in the same timeEntity Framework 4.3.1 Migrations - 启用自动迁移并同时创建新数据库
【发布时间】:2012-07-04 19:27:53
【问题描述】:

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

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

【问题讨论】:

    标签: entity-framework-4.3 entity-framework-migrations


    【解决方案1】:

    所以你有现有的数据库,你想在那个数据库上使用迁移,同时你想在新部署的情况下支持通过迁移创建数据库?

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

    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 方法中执行脚本987654324@。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2019-02-12
      • 1970-01-01
      • 2011-01-12
      • 2012-11-10
      相关资源
      最近更新 更多