QueryOver返回完整的树层次结构

时间:2013-05-14 15:54:36

标签: nhibernate queryover

鉴于以下实体:

public class Comment
{
    public int Id { get; set; }
    public IList<Comment> ChildComments { get; set; }
}

我基本上想要加载完整的树,即带有子项及其子项的注释等等,使用QueryOver获取给定的Id。不幸的是,我真的不知道从哪里开始。

将映射设置为急切加载集合不是我的选择。

有没有办法轻松地做到这一点,还是我需要在这种情况下使用hql?

感谢。

1 个答案:

答案 0 :(得分:1)

好吧,我认为你需要将来的查询和DistinctRootEntityResultTransformer

我可以告诉你我是如何使用Criteria做的,并建议你也这样做。在我们的项目中,一切都是LINQ,但这个必须是丑陋的,并带有魔法字符串。这是具有许多成员和许多子组的Group对象。执行查询后,我获得了根(root是父元素为null的元素),其中包含LOADED对象。对于您的情况,您应该通过CommendId添加限制。此外,每次提取都必须在单独的将来查询中完成。祝你好运

public static GroupDto GetGroupHierarchy(this ISession session)
    {
        session
            .CreateCriteria<GroupDto>()
            .Add(Expression.Eq("IsActive", true))
            .SetFetchMode("Subgroups", NHibernate.FetchMode.Eager)
                .SetResultTransformer(new DistinctRootEntityResultTransformer())
                .Future<GroupDto>();

        var groups = session
               .CreateCriteria<GroupDto>()
               .Add(Expression.Eq("IsActive", true))
                   .SetFetchMode("Members", FetchMode.Eager)
                   .SetResultTransformer(new DistinctRootEntityResultTransformer())
                   .Future<GroupDto>();

        return groups.Single(g => g.Parent == null);
    }