MVC3和Code First Migrations – 自从创build数据库以来,支持“blah”上下文的模型已经发生了变化“
我使用Entity Framework Code First开始了我的项目。 当我准备好时,我将我的数据库和代码上传到我的主机提供商。 一切正常。
我需要添加一个新的字段到我的一个类,我不想松散数据库中的数据。 因此,我尝试了一些关于使用Code First Migrations的博客post。 我做了以下几点:
- 我备份了我的远程(生产)数据库。
- 我在本地附加这个数据库
- 我将该属性添加到我的课程中
- PM>启用迁移
- PM> Add-Migration AddSortOrderToCar
- PM>更新 – 数据库
- 在这一点上,我创build了本地数据库的.bak文件,然后使用该文件“恢复”到远程的。
- 最后,我将代码发布到远程站点。
当我访问该网站时,我收到以下错误消息:自从创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