如何在NHibernate中使用filter和max结果加载分层数据

时间:2013-12-27 17:36:29

标签: c# sql nhibernate fluent-nhibernate

class Comment {
    ISet<Comment> Replies;
    Guid Id;
    Guid PostId;
    DateTime Date;
    Comment ParentComment;
    bool IsCurrent
}

class CommentMap : ClassMap<Comment> {
    CommentMap() {
        Table("Comments");
        Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x=>x.PostId);
        Map(x=>x.Date);
        Map(x=>x.IsCurrent);
        References(x=>x.ParentComment).Column("ParentCommentId");
        HasMany(x=>x.Replies).Column("ParentCommentId").Inverse().Cascada.All();
    }
}

我需要为每个层次结构加载所有ParentComment = null和IsCurrent = 1注释。我希望按日期排序desc并限制30个查询。

总根评论最多30个,每个评论必须为IsCurrent = 1

  • 根评论1
    • 评论1.1
      • 评论1.1.1
    • 评论1.2
  • 根评论2
    • 评论2.1

当我在查询下运行时,NHibernate会生成1个查询,并获取所有带有层次结构的根注释。但我添加IsCurrent条件nhibernate生成2个单独的查询。

var query = DbSession.CreateCriteria<Comment>()
             .Add(Expression.Eq("PostId", postId))
             .SetFetchMode("Replies", FetchMode.Eager)
             .SetResultTransformer(new DistinctRootEntityResultTransformer())
             .Future<Comment>();
        var comments = query.Where(g => g.ParentComment == null);

0 个答案:

没有答案