NHibernate集合大小,无需加载整个集合

时间:2011-08-23 12:25:58

标签: sql linq nhibernate hql

:)

我有以下课程:

  • 不喜欢
    • DislikedComment (评论)
    • MemberId (int)
  • 注释
    • 不喜欢(列出<不喜欢>)
    • 文字(字符串)
    • ArticleId (int)

(为简洁省略了额外属性)

使用Fluent NHibernate以预期的方式映射这些类(在注释列表中使用反转)。现在我希望NHibernate在加载评论时加载评论的 Dislikes 集合的大小,但不加载整个集合。我非常想避免公式(yuk @ native sql),我更希望NHibernate只触发一个查询。这有可能吗?

我知道Extra Lazy功能,但据我所知,这会引发一个额外的查询,这对于数百条评论的列表来说并不是最佳的。

1 个答案:

答案 0 :(得分:1)

这是一个常见的误解,你需要1个查询才能获得最佳性能。

每个连接都要求数据库执行其他工作,并且每次额外连接时查询的复杂性和成本都会快速增长。虽然关系数据库针对处理连接进行了优化,但执行多个单独的查询通常更有效,而不是单个查询中包含多个连接。

在你的情况下,我会做2个查询。

var dislikeCount = _session.Query<Comment>().Count(x=>x.Dislike);
var comments = _session.Query<Comment>().ToList();

ps:别忘了将它包装在一个事务中。