C# 如何使用NHibernate加载聚合的子代?

C# 如何使用NHibernate加载聚合的子代?,c#,nhibernate,performance,C#,Nhibernate,Performance,我的班级结构如下: class TestCase { public IList<Step> Steps { get; set; } } class Step { public IList<Action> Actions { get; set; } } class Action { } 类测试用例{ 公共IList步骤{get;set;} } 类步骤{ 公共IList解决了使用TestCases加载步骤s的问题(使用IMultiQuery),但是我如何加载

我的班级结构如下:

class TestCase {
  public IList<Step> Steps { get; set; }
}

class Step { 
  public IList<Action> Actions { get; set; }
}

class Action { } 
类测试用例{
公共IList步骤{get;set;}
}
类步骤{

公共IList解决了使用
TestCase
s加载
步骤
s的问题(使用
IMultiQuery
),但是我如何加载
操作呢?

您可以完全按照引用的帖子所讨论的内容进行操作。只需将
第三个标准添加到第二个标准上,而不是将它们都添加到第一个标准上

var result = session.CreateMultiCriteria()
            .Add(criteria1
                .Add(criteria2)
            )
            .List();

你可以完全按照引用文章中讨论的内容来做。只需在第二个标准上添加第三个标准,而不是在第一个标准上同时添加第三个标准

var result = session.CreateMultiCriteria()
            .Add(criteria1
                .Add(criteria2)
            )
            .List();

您需要注意此处的交叉积。要处理多个级别的深度以进行即时获取,您需要使用a而不是or。这将确保您的测试用例中没有重复的“步骤”。最后,要使其正常工作,请使用以下方法:


var result =  session.CreateCriteria(typeof (TestCase))
                .CreateAlias("Steps", "s")
                .CreateAlias("s.Actions", "a")
                .SetResultTransformer(CriteriaUtil.DistinctRootEntity);
                .List();

您需要注意此处的交叉积。要处理多个级别的深度以进行即时获取,您需要使用a而不是or。这将确保您的测试用例中没有重复的“步骤”。最后,要使其正常工作,请使用以下方法:


var result =  session.CreateCriteria(typeof (TestCase))
                .CreateAlias("Steps", "s")
                .CreateAlias("s.Actions", "a")
                .SetResultTransformer(CriteriaUtil.DistinctRootEntity);
                .List();