c# – 迁移问题 – EF认为数据库需要更新,引用它的项目将无法运行

所以在上周我已经为我的MVC门户项目添加了几个迁移.

出现了一些问题,这意味着我不得不回滚特定的迁移.

我最近的迁移历史:

201506101200157_userPermissions
201508181440262_API1
201508201305341_ContactUpdate
201508241312425_ApiLog
201508271518402_ActivityLog

我需要否定的迁移是ContactUpdate,我做了一些愚蠢的事情来实现这个目标.我回滚到API1,而不是简单地进行更改并添加新的迁移,删除了ContactUpdate迁移,然后重新更新回ActivityLog.

这似乎工作正常,我的门户网站运行正常,我没有在这个项目中的数据库错误.但是当我运行add-migration时,up方法基本上是来自ContactUpdate的down方法,即它仍然认为它需要恢复以适应我所做的更改.

ContactUpdate迁移涉及向Contact表添加两个字段.总而言之,这是我采取的行动顺序:

>回滚到API1
>删除ContactUpdate迁移
>更新 – 数据库到最新迁移
>从Contact类中删除两个字段

所以很明显为什么EF认为它需要删除这两列,因为我在上次更新后删除了它们.

我参与这个MVC项目的项目现在抛出一个错误

The model backing the context has changed since the database was created

我把它归结为EF的这个问题,相信我的数据库需要更新,尽管数据库和我的代码之间有完全的凝聚力.我该如何解决这个问题?

最佳答案 您可以使用源代码控制来恢复迁移并正确执行吗?即在ActivityLog撤消ContactUpdate之后添加一个新的迁移?

如果没有,您可以添加空白迁移.这将包括当前模型的快照,并将其存储在迁移历史记录表中.这样做可以使一切恢复正常.运行Add-Migration并删除Up和Down方法的内容.

NB我相信你已经知道了这一点,但是为了将来遇到这个答案的其他人的利益,我不建议将空白迁移作为通常的工作流程,只是为了纠正错误.

点赞