0

给定以下实体:

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

我基本上想加载完整的树,即评论与它的孩子加上他们的孩子等等,使用QueryOver 为给定的ID。不幸的是,我真的不知道从哪里开始。

将映射设置为急切加载集合对我来说也不是一个选项。

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

谢谢。

4

1 回答 1

1

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

我可以向您展示我如何使用 Criteria 进行操作,并建议您也这样做。在我们的项目中,一切都是 LINQ,但这个必须是丑陋的并且带有魔法字符串。这是具有许多成员和许多子组的组对象。执行查询后,我得到了根(根是父元素为空的元素),其中包含 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);
    }
于 2013-05-14T23:06:18.927 回答