我使用Entity Framework Code First开始了我的项目。当我准备好时,我将我的数据库和代码上传到我的主机提供商。一切正常。
我需要在我的一个类中添加一个新字段,我不想丢失数据库中的数据。因此,我尝试了一些关于使用Code First Migrations的博客文章。我做了以下事情:
当我访问该网站时,我收到以下错误消息: 自数据库创建以来,支持'blahblah'上下文的模型已经发生了变化。请考虑使用Code First Migrations来更新数据库。
我做错了什么?
答案 0 :(得分:25)
根据我的经验,这表明迁移表不同步(即使您的数据不是),并且现在已经成为db模式的一部分(因为4.3我认为 - 在系统表下)。
可能有很多原因和方法来体验这种错误,但大部分时间......
有问题的部分是手动支持/恢复整个数据库与代码更改的一些组合 - 我不完全确定为什么总是如此。
简而言之,即使Db-s是相同的迁移表数据可能不是 - 并且哈希比较可能会失败(仍然完全恢复听起来不够好 - 但你有'双方')。
对我有用的是使用
Update-Database -Script
创建一个带有“迁移差异”的脚本,
您可以手动将其作为SQL脚本应用于目标服务器数据库(您应该插入正确的迁移表行等)。
如果仍然不起作用 - 你仍然可以做两件事......
删除迁移表(目标 - 在系统表下) - 根据http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx中的注释 - 应该回到之前的行为并且如果您确定您的Db-s是相同的 - 它只是'信任你',
作为我使用的最后手段 - 制作完整模式的Update-Database -Script
(例如,通过初始化一个空的数据库,它应该强制执行'完整脚本'),
找到INSERT INTO [__MigrationHistory]
条记录,
只需运行它们,将它们插入数据库,
并确保您的数据库 - 和代码匹配,
应该让事情再次同步。
(免责声明:这不是一个可以随时工作的防弹,你可能需要根据当地情况尝试一些事情 - 但应该让你同步)
答案 1 :(得分:0)
我认为在第6步中你需要运行Update-Database -Verbose
此链接对于使用Scaffolding更新EF中的数据库非常有用 http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-entity-framework-scaffolding-and-migrations