EF迁移问题

时间:2013-04-02 11:31:54

标签: entity-framework ef-code-first ef-migrations

我们正在一个项目中与EF Migrations合作,共有3个州:

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

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

当我们将项目上传到暂存时,问题就出现了。由于

,我们需要更新登台数据库
  

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

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

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

从迁移的角度来看,您拥有的方案 - 支持同一数据库支持的ProductionStaging - 有点问题。

您可以取消迁移 - 删除迁移表(__MigrationHistory) - 并同步内容(请参阅下面的帖子了解更多信息) - 但是指向同一个Db的两个代码库意味着one migration table - 除非代码相同(迁移方式),否则它将无效。所以唯一的解决方案就是关闭迁移。

但是,隧道尽头似乎有一盏灯。

  

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

我还没有时间玩这个,但是......
这意味着 - 只需让您可以自定义Configuration并覆盖IHistoryContextFactory反过来允许您重命名迁移表

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

  

请注意,它没有得到证实 - 但我认为他们已将其投入使用   出于这些原因。

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

  • 制作两个工厂 - 用于分期和制作 - 每个工厂都创建不同的“迁移表”,
  • 每个部署 - 都有自己的迁移(在代码中) - 以及数据库中的迁移历史记录,
  • 您可以手动调整特定的“迁移表”,例如分期 - 如果需要 - 不会损害对方,
  • 确保您的数据库“足够相似”,以便两个代码/迁移可以并行运行

这可行,我想......


How to Synchronize Db / Code - Summary
How to Synchronize Db / Code - Long Version

答案 1 :(得分:1)

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

但是

  

数据库更改很少

已经不是同一个数据库了。当然,即使在更改=)

之后,您也无法计算相同的哈希值

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

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

这三个都是不同的实例。