MVC3和Code First Migrations – 自从创build数据库以来,支持“blah”上下文的模型已经发生了变化“

我使用Entity Framework Code First开始了我的项目。 当我准备好时,我将我的数据库和代码上传到我的主机提供商。 一切正常。

我需要添加一个新的字段到我的一个类,我不想松散数据库中的数据。 因此,我尝试了一些关于使用Code First Migrations的博客post。 我做了以下几点:

  1. 我备份了我的远程(生产)数据库。
  2. 我在本地附加这个数据库
  3. 我将该属性添加到我的课程中
  4. PM>启用迁移
  5. PM> Add-Migration AddSortOrderToCar
  6. PM>更新 – 数据库
  7. 在这一点上,我创build了本地数据库的.bak文件,然后使用该文件“恢复”到远程的。
  8. 最后,我将代码发布到远程站点。

当我访问该网站时,我收到以下错误消息:自从创build数据库以来,支持“blahblah”上下文的模型已经发生了变化。 考虑使用Code First Migrations来更新数据库。

我究竟做错了什么?

根据我的经验,这表明迁移表不同步(即使你的数据不是同步的),现在已经是数据库模式的一部分了(从4.3我想 – 在系统表下)。

可能有很多原因和方法来体验这个错误,但是大部分时候…

有问题的部分是手动备份/恢复整个数据库与代码变化的一些组合 – 我不完全确定为什么总是。

简而言之,即使Db-s是相同的迁移表数据可能不是 – 和哈希比较可能会失败(仍然完全恢复听起来像够好 – 但你有'双方')。


什么对我有用就是用
Update-Database -Script

这创build了一个“迁移差异”的脚本,
您可以手动将其应用为目标服务器数据库上的SQL脚本(并且您应该获得正确的迁移表行插入等)。

如果这仍然行不通 – 你仍然可以做两件事情…

a)按照http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough删除迁移表(目标; – 在系统表下) 。在那里aspx注释 – 这应该回到以前的行为,如果你确定你的Db – 是相同的 – 它只是“相信你”,

b)作为我使用的最后一Update-Database -Script – 使用完整模式的Update-Database -Script (例如,通过初始化一个应该强制执行“完整脚本”的空数据库)
findINSERT INTO [__MigrationHistory]logging,
只要运行这些,将它们插入到数据库中,
并确保您的数据库和代码匹配,

这应该使事情再次同步运行。

(免责声明:这不是一个可以在任何时候都能正常工作的子弹,你可能需要根据你的本地情况尝试一些东西 – 但是应该让你同步)

我想在第6步中,你需要运行Update-Database -Verbose

此链接对于使用脚手架更新EF中的数据库非常有帮助http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-entity-framework-scaffolding-and -migrations