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();