NHiber映射中的NHibernate项数

Mer*_*ham 1 nhibernate nhibernate-mapping

在NHibernate中有一种方法可以将计数查询的结果映射到类的属性吗?我想在XML映射中执行此操作.

我知道我可以通过代码(通过实际查询计数的构造,或通过作弊,执行完整查询,并计算结果项)来制定这个,但如果我可以编写一些简短的SQL或HQL,那将是很好的.以某种方式阻塞到我的XML映射中.

一个具体的例子.我的DB有这些表 -

Entry
  Id
  BodySummary

Comment
  Id
  EntryId
  Body
Run Code Online (Sandbox Code Playgroud)

我想得到一些条目摘要.对于每个条目,我想获得评论计数(和正文摘要).

仅供参考:我省略了我的数据库中不相关的部分,如作者,条目标题/正文,时间戳等.这当然应该与我询问的查询部分无关.

Mic*_*uso 6

我认为你不能用HQL做到这一点.但是这里是如何用SQL做的:

<class name="Entry" .... >
  <id>
    //ID Strategy
  </id>
  <property name="BodySummary" />
  ...
  <property name="CommentCount" formula="(SELECT COUNT(*) FROM Comment c WHERE c.EntryId = Id)" type="Int32" />
</class>
Run Code Online (Sandbox Code Playgroud)

重要提示:

  1. 将sql包装在括号中 - 如果未包装则会出错
  2. 这不是HQL - 您必须使用数据库列/表名而不是映射的类/属性
  3. 提供一个返回类型,以便NHibernate知道如何将它映射回属性

您可能希望将其设置为只读字段,但这是您如何映射它的基础知识.

结果SQL将是这样的:

SELECT          this_.Id                as Id11_0_,
                this_.BodySummary       as BodySummary10_11_0_,
                (SELECT COUNT(* )
                 FROM   Comment c
                 WHERE c.EntryId = this_.Id) as formula0_0_
FROM     Entry this_
Run Code Online (Sandbox Code Playgroud)