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
当我在查询下运行时,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);