【问题标题】:MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"MVC3 和 Code First 迁移 - “支持 'blah' 上下文的模型自创建数据库以来已更改”
【发布时间】:2012-05-02 12:48:54
【问题描述】:

我首先使用实体​​框架代码开始了我的项目。当我准备好时,我将我的数据库和代码上传到我的主机提供商。一切正常。

我需要在我的一个类中添加一个新字段,并且我不想丢失数据库中的数据。因此,我尝试关注一些关于使用 Code First 迁移的博客文章。我做了以下事情:

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

当我访问该站点时,我收到以下错误消息: 自数据库创建以来,支持“blahblah”上下文的模型已更改。考虑使用 Code First 迁移来更新数据库。

我做错了什么?

【问题讨论】:

    标签: entity-framework asp.net-mvc-3 entity-framework-migrations


    【解决方案1】:

    根据我的经验,这表明迁移表不同步(即使您的数据不同步),并且现在已成为 db 架构的一部分(我认为从 4.3 开始 - 在系统表下)。

    可能有很多原因和方法会遇到该错误,但大多数时候......

    有问题的部分是手动备份/恢复完整数据库以及代码更改的某种组合——我不完全确定为什么总是这样。

    简而言之,即使 Db-s 是相同的迁移表数据也可能不是 - 并且哈希比较可能会失败(仍然完全恢复听起来足够好 - 但你有“两个方面”)。


    对我有用的是使用
    Update-Database -Script

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

    如果这仍然不起作用 - 你仍然可以做两件事......

    1. 删除迁移表(目标 - 在系统表下) - 按照 http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx cmets 那里 - 应该会故障恢复到以前的行为,如果你确定你的 Db-s 是相同的 - 它是只是“相信你”,

    2. 作为最后的手段,我使用了一个完整架构的Update-Database -Script(例如,通过初始化一个应该强制执行“完整脚本”的空数据库),
      查找 INSERT INTO [__MigrationHistory] 记录,
      只需运行这些,将它们插入数据库,
      并确保您的数据库 - 和代码匹配,

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

    (免责声明:这不是始终有效的防弹措施,您可能需要根据当地情况尝试一些事情 - 但应该让您保持同步)

    【讨论】:

    • 'Update-Database -Script' 工作。我原以为“更新数据库”命令会做同样的事情(但不生成脚本)。反正。谢谢!
    • @ScottDietrich - np - 嗯,它应该,但你必须在所有方面保持同步(例如,迁移基于本地数据库的“状态”等生成 - 所以迁移是适合您的“本地”数据库与代码-一旦您开始“将事物移出”,您做错事的可能性就更大)。总而言之,SQL 脚本被证明是一种更安全的方式,您可以准确地看到 - 除非您在服务器上也有开发设置(以便能够“就地”运行迁移)
    • 我有一个数据库,其中运行了一些迁移,但 __MigrationHistory 表中的记录并没有阻止那些相同的迁移再次尝试运行。我最终删除了 __MigrationHistory 表中的所有行,然后手动插入由 -Script 命令生成的 INSERT INTO [__MigrationHistory] ​​行。迁移历史现在再次有序。感谢@NSGaga 非常有帮助的回答!
    【解决方案2】:

    我认为在第 6 步中您需要运行 Update-Database -Verbose

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

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多