我有以下类结构:
class TestCase {
public IList<Step> Steps { get; set; }
}
class Step {
public IList<Action> Actions { get; set; }
}
class Action { }
我想在一个查询中加载TestCase
,所有Step
和所有Event
,并避免选择N + 1问题。
This post解决了使用Step
加载TestCase
s(使用IMultiQuery
)的问题,但我如何加载Action
?
答案 0 :(得分:1)
你需要在这里小心你的交叉产品。要处理多个深度以进行急切提取,您需要使用&lt; set&gt;而不是&lt; bag&gt;或&lt; list&gt;。这将保证您的测试用例中没有重复的“步骤”。最后,要使其工作,请使用以下内容:
var result = session.CreateCriteria(typeof (TestCase))
.CreateAlias("Steps", "s")
.CreateAlias("s.Actions", "a")
.SetResultTransformer(CriteriaUtil.DistinctRootEntity);
.List();
答案 1 :(得分:0)
您可以完全按照所讨论的帖子进行讨论。只需Add
第3个标准进入第2个标准,而不是第2个标准。
var result = session.CreateMultiCriteria()
.Add(criteria1
.Add(criteria2)
)
.List();