我正在尝试掌握 QueryOver,我希望这会返回一个摘要项目,其中包含急切加载的 ReportRows 集合。
更新 第一块代码不在我原来的问题中,但它是我问题的原因 - 感谢 dotjoe 的回答
// some code to create a Summary and a whole graph of child records
...
// then...
session.Save(summary);
session.Flush(); // write the changes
session.Evict(summary); // clear out session to check my query below is 'fresh'
// Originally-posted code
Summary summaryAlias = null;
Report reportAlias = null;
var summaryQuery =
session.QueryOver<Summary>(() => summaryAlias)
.Fetch(x => summaryAlias.Reports).Eager
.Left.JoinAlias(() => summaryAlias.Reports, () => reportAlias)
.Where(() => summaryAlias.Id == workItemId);
Summary summary = summaryQuery.SingleOrDefault<Summary>();
session.Close();
但是,当我在调用 session.Close()之后遇到断点(以防止任何进一步的延迟加载)时,我发现我的 Summary 类中的所有内容都已填充,而不仅仅是 ReportRows 集合。
即使我没想到它们也会填充的一些示例:
ReportRow.Student
ReportRow.Programme
ReportRow.Programme.Modules (a collection)
ReportRow.Programme.Modules.Components (another collection inside each 'Module')
我正在使用 Fluent 自动映射,并且我已将其配置为延迟加载,以确保使用:
.Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Always())
并且还尝试了...
.Conventions.Add(FluentNHibernate.Conventions.Helpers.LazyLoad.Always())
为什么要加载所有内容?
谢谢