【问题标题】:Method not found: 'System.Linq.IQueryable`1<!!0> NHibernate.Linq.LinqExtensionMethods.Query(NHibernate.IStatelessSession)'找不到方法:'System.Linq.IQueryable`1<!!0> NHibernate.Linq.LinqExtensionMethods.Query(NHibernate.IStatelessSession)'
【发布时间】:2019-07-26 12:02:55
【问题描述】:

我在将 NHibernate 从 4.1.2 升级到 5.2.3 和 Target Framework 从 4.5 升级到 4.6.2(与 NH 5.x 兼容)时遇到问题。当我使用 LINQ 执行查询时会出现问题(之前效果很好):

service.Query.Where(p => p.Approved).FirstOrDefault();

这是详细消息异常:

找不到方法:'System.Linq.IQueryable`1 NHibernate.Linq.LinqExtensionMethods.Query(NHibernate.IStatelessSession)'。

我注意到当我调用service.Query时,系统会抛出异常:

“service.Query”引发了“System.MissingMethodException”类型的异常

我错过了什么?

【问题讨论】:

  • 这是:)). 错字吗?
  • 这是我编辑时的错误,不是上述错误的原因。谢谢提醒

标签: c# linq nhibernate iqueryable


【解决方案1】:

您的应用仍在尝试调用在 NHibernate 5 中删除的旧扩展 Query 方法。自 NHibernate 5 以来,QueryIStatelessSession/ISession 接口方法。

您看到的异常意味着您的应用没有使用新的 NHibernate dll 正确重新编译。确保您的所有项目都引用了新的 dll(或 nuget 包)并且没有编译错误(可能的情况 - 您在升级之前运行了最后一次成功的构建,但使用了更新的 dll)。

【讨论】:

  • 谢谢。最后,我发现了问题。这是由于我的项目通过中间库执行查询引起的,这意味着当我调用service.query时,它不是直接使用NH查询,而是调用中间库的函数Query和中间库对LinqExtensionMethods.Query的调用,但是在 NH 5.2.3 中,此方法在 LinqExtensionMethods 类中不存在。
  • @ThanhLD 我需要你的帮助来解决这个问题。我有同样的问题。您是如何解决问题的?
  • @CodeRunner 我通过将旧 DLL 更改为适合当前 NHibernate 版本的新 dll 来解决我的问题。
  • 感谢您的帮助。但它仍然适用于 4.1.2,因此我将其降级为 4.1.2.4000 版本。它现在工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2020-11-25
相关资源
最近更新 更多