我们正在一个项目中与EF Migrations合作,共有3个州:
我们在开发中没有问题:我们更改了DbContext,EF迁移更改了我们的数据库。每个开发人员都拥有正确的代码和正确的数据库。
当我们将项目上传到暂存时,问题就出现了。由于
,我们需要更新登台数据库自创建数据库以来,支持'XXX'上下文的模型已更改
但是如果我们更新数据库(使用迁移),Production会抛出相同的消息(因为Production和Staging具有相同的数据库)。
数据库更改很少,因此如果我们不使用EF迁移就没有问题。
有什么建议吗?
答案 0 :(得分:2)
我知道这已经得到了回答 - 但只是为了'历史目的'和其他可能会看到这一点的人......
从迁移的角度来看,您拥有的方案 - 支持同一数据库支持的Production
和Staging
- 有点问题。
您可以取消迁移 - 删除迁移表(__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中使用相同的数据库可能是您的设计问题。
但是
数据库更改很少
已经不是同一个数据库了。当然,即使在小更改=)
之后,您也无法计算相同的哈希值我认为这是它应该运作的方式。
我们还为每个开发人员本地测试数据库提供某种开发数据库 - 用于测试目的和生产力数据库。
这三个都是不同的实例。