Entity Framework 6 Code First迁移 - 为生产环境创建多个分支

17
在我的项目中,我们有一个分支模型,其中拥有独立的开发分支和每个发布版本的单独分支。可能看起来像这样:


dev         ______       ______
           /      \     /      \
master  --+---+----+---+---+----+----+--- (...)
           r1  \______/  r2 \_______/

因此,我们在dev分支上开发,合并到master分支,然后创建一个发布分支(r1,r2,...)。

我们想使用EF 6手动迁移(而非自动迁移),但有一个问题我们不知道如何回答。

想象一下:

dev         _(1)__       ____(4)
           /      \     /      \
master  --+---+----+---+---+----+-(5)*-+--- (...)
           r1  \_(2)__/  r2 \(3)______/
每个数字都代表一个迁移。它们已被添加到每个分支的源代码控制中,并已应用于我们项目在生产环境中的数据库(我们支持一些时间的多个版本只是为了修复)因此我们无法降级它们,它们只能向上升级。星号标志着我们要分析的时间点。我们希望迁移按照以下方式工作:
  • r1 数据库只有迁移 (2) 已应用
  • r2 数据库已应用迁移 (1), (2) 和 (3)
  • master 数据库已应用迁移 (1), (2), (4) 和 (5)
  • dev 数据库已应用迁移 (1), (2) 和 (4)

此外:

  • 我们不能失去任何数据库中的数据
  • r1 数据库必须能够被更新至 r2 (或任何将来的版本)数据库而没有错误,以便它具有与其代码 first 模型相对应的所有 r2 数据库(作为 r2 创建或从早期版本更新)的相同数据库结构。

这可以做到吗?如果可以,怎么做?

如果需要更多细节,请询问。

1个回答

25
我可以试着解释每种情况下你可以做什么,但这相当复杂,我无法像这里解释得那么好: 团队环境中的代码优先迁移 尽管它很复杂,你将不得不经常参考这个文档来合并分支,但如果你按照这个文档操作,你会发现它解决了你所有的问题。
免责声明:我知道SO应该是自包含的,但是解释太复杂和冗长,以至于我甚至无法在这里添加一个摘要。我希望链接的MSDN文档不会消失。

经过一段时间的测试和检查,我可以确认它似乎是有效的!我们经常使用“选项1:添加一个空白的'merge'迁移”。谢谢! - pinus.acer
在主分支已经上线的情况下,最好重新生成特性分支迁移以始终在主分支迁移之后进行,以避免当某个开发人员在特性分支中进行了与主分支中一些迁移时间戳之前的迁移不兼容的模型更改时出现混淆。 - JustAMartin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接