【问题标题】:Entity framework database differences实体框架数据库差异
【发布时间】:2014-03-13 22:39:58
【问题描述】:

我必须更改了导致实体框架中出现异常的某些内容。我不确定它是什么,但我猜我的课程与我的数据库不符。有没有办法准确地找出不符合的地方?

这是一个例外:

An exception of type 'System.InvalidOperationException'
occurred in EntityFramework.dll but was not handled in user code

Additional information:
The model backing the 'SomethingContext' context has changed since
the database was created. Consider using Code First Migrations to
update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

这是代码行:

var results = db.Table.Where(x => !x.IsBool);

【问题讨论】:

  • 您从一个上下文中获取了元素,但尝试将其添加到另一个上下文中?
  • 不,我只是在查询一个表。生病添加一个例子。

标签: c# .net entity-framework orm


【解决方案1】:

是的,您的类与数据库中的架构不匹配。您是否在数据库上启用了 Code First 迁移? (如果没有,请参阅您提供的异常文本中链接中有关启用迁移的部分)如果您生成一个新迁移(来自包管理器控制台的add-migration [Name]),您将生成一些代码,这些代码会准确地显示给您需要对数据库进行哪些更改才能使其与您的代码匹配。如果您不想,则不需要将迁移实际应用到数据库(只是不要运行update-database,如果您要尝试运行应用程序,请确保关闭自动迁移)如果您只想知道差异是什么,您可以轻松地从代码库中删除迁移。

【讨论】:

  • 我试过这个,但它并没有告诉我我在期待什么。它似乎列出了一堆我绝对没有编辑过的东西。还有其他想法吗?
  • 一些直接的想法:迁移 Up 方法中列出的内容是否准确反映了您当前的代码模型?创建迁移时,您是否针对正确的数据库/上下文?如果您最初使用不同的初始化程序类型创建数据库,您可能需要在启用迁移之前删除它在数据库迁移表中的行。在不知道您在迁移中看到什么样的差异的情况下提出更多建议有点困难。希望其中的一些帮助!
  • 如果迁移对您不起作用,您可以尝试另一个简单但可能很痛苦的选择 - 在新数据库中重新定位您的应用程序,运行它并查看 EF 生成的内容,然后与您现有的数据库进行比较。
  • 我最终发现了问题所在。似乎在 clr 端删除了很多表,所以当我运行迁移时,它有一堆 drop 方法调用。这让我很困惑,因为我没有删除任何东西(虽然有人做了一段时间),但我现在明白,对于数据库中的每个表,都需要有一个相应的 clr 类。我没有花太多时间考虑下降,因为我想象即使缺少 clr 类,实体仍然可以工作,但如果有 clr 类但没有相应的表,则不会。显然,我的假设是错误的。谢谢!
  • 很高兴您对它进行了排序。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2016-09-07
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多