2

我们在一个具有 3 个状态的项目中与 EF Migrations 合作:

  • 开发:每个开发者都有自己的数据库
  • 暂存:与生产相同的数据库
  • 生产:与登台相同的数据库

我们在开发中没有问题:我们更改了 DbContext 并且 EF 迁移更改了我们的数据库。每个开发人员都有正确的代码和正确的数据库。

当我们将项目上传到暂存时,问题就来了。我们需要更新暂存数据库,因为

自创建数据库以来,支持“XXX”上下文的模型已更改

但是如果我们更新数据库(使用迁移),Production 会抛出相同的消息(因为 Production 和 Staging 具有相同的数据库)。

数据库更改很少,因此如果我们不使用 EF 迁移,那将没有问题。

有什么建议吗?

4

2 回答 2

2

我知道这已经得到了回答 - 但只是为了“历史目的”和其他可能看到这个的人......

从迁移的角度来看,您所拥有的场景 - 支持两者ProductionStaging支持同一个数据库 - 有点问题。

您可以取消迁移-删除迁移表(__MigrationHistory)-并同步事物(有关更多信息,请参见下面的帖子)-但是有两个指向相同 Dbone migration table的代码库意味着-除非代码相同(迁移方面)它行不通。因此,唯一的解决方案是关闭迁移。

然而,隧道尽头似乎有一盏灯。

来自 EF(EF6 预发行版)的新版本具有Code First Migrations History Table Customization

我还没有时间玩这个,但是......
这意味着 - 简单地说你可以自定义你的Configuration并覆盖IHistoryContextFactory. 这反过来又允许您重命名迁移表

对于更复杂的场景 - 就像你一样 - 这可能是一个解决方案

请注意,它尚未得到证实-但我认为他们正是出于这些原因将其放在那里。

“伪解决方案”看起来像这样......

  • 建立两个工厂——用于暂存和生产——每个都创建不同的“迁移表”,
  • 每个部署 - 都有自己的迁移(在代码中) - 以及数据库中的迁移历史,
  • 您可以手动调整特定的“迁移表”,例如分期 - 如果需要 - 不影响另一个,
  • 确保您的数据库“足够相似”,以便两个代码/迁移可以并行运行

这可能行得通,我想...


如何同步数据库 / 代码 - 总结
如何同步数据库 / 代码 - 长版

于 2013-04-02T14:30:14.370 回答
1

在 Stagig 和生产中使用相同的数据库可能是您的设计问题。

数据库更改很小

已经不是同一个数据库了。当然,即使经过微小的更改,您也无法计算相同的哈希值=)

我认为这是它应该工作的方式。

我们还为每个开发人员本地测试数据库提供某种开发数据库 - 用于测试目的和生产力数据库。

而且这三个都是不同的实例。

于 2013-04-02T11:36:30.750 回答