MVC3和代码首先迁移 - “模型支持的‘嗒嗒’语境已经改变,因为数据库创建”MVC3和代码首先迁移

2019-05-13 14:06发布

我使用实体框架代码第一次开始了我的项目。 当我准备好了我上传我的数据库和代码到我的主机提供商。 一切工作。

我需要一个新的字段添加到我的课之一,我不想失去在数据库中的数据。 因此,我尝试以下有关使用的Code First迁移一些博客文章。 我做了以下内容:

  1. 我支持我的遥控器(生产)数据库。
  2. 我在本地连接这个数据库
  3. 我加了属性,以我的课
  4. PM>启用的迁移
  5. PM>添加迁移AddSortOrderToCar
  6. PM>更新,数据库
  7. 在这一点上,我创建的本地数据库的.bak文件,然后使用该文件为“恢复”到远程之一。
  8. 最后,我发表的代码到远程站点。

当我访问该网站,我得到了以下错误消息:自数据库创建的模型支持的“blahblah”已经时过境迁。 考虑使用的Code First迁移来更新数据库。

我究竟做错了什么?

Answer 1:

从我的经验表明,迁移表不同步(即使你的数据不是),而这一直是数据库架构的一部分,现在(因为4.3我认为 - 在系统表)。

可能有很多的原因和途径,体验错误,但大部分的时间...

有问题的部分是手动备份/还原整个数据库一起更改代码的某些组合 - 我不是,为什么总是完全肯定。

总之,即使DB-可相同迁移表的数据可能不是 - 和散列比较可能会失败(仍完全恢复一样不够好声音 - 但你必须“双方”)。


什么工作对我来说是使用
Update-Database -Script

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

如果仍然不行 - 你仍然可以做两件事情...

  1. 除去迁移表(目标-下系统表) -按照http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx评论在那里 - 应该故障回复到以前的行为,如果你确信你的数据库-S是相同的 - 它只是要“相信你”,

  2. 作为最后的手段我用-做一个Update-Database -Script完整架构的(例如,通过初始化一个空分贝,应强制“全剧本”),
    找到INSERT INTO [__MigrationHistory]记录,
    只要运行那些,它们插入到数据库中,
    并确保你的数据库 - 和代码匹配,

应该让事情保持同步再次运行。

(免责声明:这不是防弹在任何时候都工作,您可能需要尝试给当地的情景几件事情 - 但应该让你同步)



Answer 2:

我认为,在第6步,你需要运行更新,数据库-Verbose

另外这个链接是在EF与脚手架更新数据库非常有帮助http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-entity-framework-scaffolding-and -migrations



文章来源: MVC3 and Code First Migrations - “model backing the 'blah' context has changed since the database was created”