插入迁移

本文关键字:迁移 插入 | 更新日期: 2023-09-27 18:22:13

下面是故事。我们有一个使用实体框架代码优先迁移的源代码管理产品。就这个问题而言,有两个分支,开发和生产。目前,开发分支有几个迁移不在生产分支中,但它们是从生产分支中的最后一个迁移开始依次进行的。

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

那么,我们如何将这些更改集成到开发分支中呢?开发分支中的迁移必须是生产站点上的迁移的后代,但我们只是在生产站点上插入了一个新的迁移。这意味着,当我们合并到开发分支时,迁移会失败,因为存在无序的迁移。

那么,在我的开发分支中,有没有任何方法可以插入来自另一个分支的迁移,将现有的迁移分流到列表中?

插入迁移

我在合并来自不同开发人员的更改时已经处理过这个问题。在为这个答案做一些研究时,我发现了这篇方便的文章,它可能比我能更好地解释它。唉,你被我卡住了。有几件事需要注意:

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

  2. 正因为如此,当你尝试更新时,你会收到一条警告,上面写着

无法更新数据库以匹配当前模型,因为有挂起的更改并且自动迁移被禁用…

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

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

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

  2. 与源代码管理同步。

  3. 运行更新数据库以应用其他开发人员已签入的任何新迁移。

    注意:如果您没有从"更新数据库"命令中收到任何警告然后其他开发人员没有进行新的迁移不需要执行任何进一步的合并。

  4. 运行添加迁移[pick_a_name]–忽略更改(例如,添加迁移合并–忽略更改)。这将生成一个具有所有元数据(包括当前模型的快照),但将忽略将当前模型与上一次迁移中的快照(意味着您将获得一个空白的Up和Down方法)。