插入迁移

时间:2015-11-17 17:12:19

标签: c# entity-framework ef-code-first entity-framework-6 ef-migrations

所以这就是故事。我们使用Entity Framework Code First迁移在源代码管理中有一个产品。为了这个问题,有两个分支,开发和生产。目前,开发分支有几个不在生产分支中的迁移,但它们依次从生产分支中的上一次迁移开始。

现在,我们需要对生产分支进行小的架构更改。我们通过添加迁移来实现此目的。然后将其发布到生产站点。

那么,我们如何将这些变化整合到开发分支中?开发分支中的迁移必然必须来自生产站点上的迁移,但我们只是在生产站点上插入了新的迁移。这意味着当我们合并到开发分支时,迁移会失败,因为存在无序迁移。

那么,在我的开发分支中,有没有办法从其他分支插入迁移,将现有迁移分流到列表中?

1 个答案:

答案 0 :(得分:1)

我在合并来自不同开发者的更改时处理了这个问题。在对这个答案进行一些研究时,我遇到了this handy article,这可能比我能更好地解释它。唉,你跟我在一起了。有几点需要注意:

  1. 实体框架并不是每次都直接将数据库与您的类进行比较。相反,它会比较它生成的edmx模型。

  2. 因此,在尝试更新

  3. 时会收到警告
      

    无法更新数据库以匹配当前模型,因为存在待处理的更改并且已禁用自动迁移...

    虽然实际执行更新。该错误指的是它所比较的​​快照(?)edmx

    最简单的方法是添加空白'合并迁移'。以下是文章中的步骤:

      
        
    1. 确保已将本地代码库中的任何待定模型更改写入迁移。这一步确保您不会错过任何一个   生成空白迁移时的合理更改。

    2.   
    3. 与源代码管理同步。

    4.   
    5. 运行Update-Database以应用其他开发人员已签入的任何新迁移。

           

      注意:如果没有从Update-Database命令收到任何警告   然后就没有其他开发人员的新迁移了   无需进行任何进一步的合并。

    6.   
    7. 运行Add-Migration [pick_a_name] -IgnoreChanges(例如Add-Migration Merge -IgnoreChanges)。这会生成所有迁移   元数据(包括当前模型的快照)但将被忽略   在比较当前模型时检测到的任何变化   最后一次迁移中的快照(意味着你得到一个空白的Up和Down   法)。

    8.