【问题标题】:NHibernate QueryOverNHibernate QueryOver
【发布时间】:2011-09-30 10:21:56
【问题描述】:

我已经四处搜索,但没有发现我在这里做错了什么。

我有一个对象 C,它包含一个对象 L 的列表,对象 C 还包含一个对类 R 的引用。

我想从对象 L 中找到对象 R。

我正在尝试这样做,但使用此代码我只能得到 null:

L 已经是函数接收的实例化对象。

var t = SessionController.CurrentSession.QueryOver<C>()
  .Where(c => c.Id == L.C_Id)
  .JoinQueryOver<R>(c => c.R)
  .Select(c => c.R).SingleOrDefault();

任何想法我在这里做错了什么将不胜感激。 谢谢

【问题讨论】:

  • 什么是 L?您的查询毫无意义,不确定您在问什么。
  • 如果L已经被实例化了,你不能直接去L.C.R吗?
  • sJhonny,这是真的,我可以。我试图了解这是如何工作的,但是如果我因为延迟加载而无法做到这一点,或者根本没有该引用或只是一个 Id 引用。
  • 要查看 NHibernate 正在运行哪些查询,您应该获取 NHibernate Profiler (nhprof.com) 或在您的 NHibernate 配置中将 show_sql 设置为 true,这将在您的控制台中输出正在运行的 SQL。
  • 另外,查看您的 NHibernate 映射可能会有所帮助。

标签: nhibernate fluent-nhibernate queryover


【解决方案1】:

问题是您的 SingleOrDefault 调用正在返回一个类 C 的实例,我猜没有具有关联类 R 的 Id 的类 C 的实例。您需要按如下方式修改您的查询:

var t = SessionController.CurrentSession.QueryOver<C>()
  .Where(c => c.Id == L.C_Id)
  .JoinQueryOver<R>(c => c.R)
  .Select(c => c.R).SingleOrDefault<R>();

注意 SingleOrDefault 调用的显式类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多