我有一个实体提醒,其中包含一组时间表(请参阅此处的映射)。我不希望我的集合计划被延迟加载,所以我将属性设置为 false:
<set access="field.pascalcase-underscore" cascade="all-delete-orphan" inverse="true" lazy="false" name="Schedules" mutable="true">
<key foreign-key="FK_Schedules_Reminders">
<column name="ReminderCode" />
</key>
<one-to-many class="ReminderSchedule" />
</set>
在一个查询中,我不想加载集合,所以我将 SetFetchMode 设置为 Lazy:
ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.SetFetchMode("Schedules", FetchMode.Lazy);
运行我的查询时,我注意到 Nhibernate 正在运行提醒查询,然后,对于每个提醒,它运行单个查询来获取计划。
这是我使用的代码:
ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.SetFetchMode("Schedules", FetchMode.Lazy)
Result = FiltersCriteria.List<Domain.Reminder>();
经过一番挣扎后,我使用 Future 更改了我的代码,一切正常:
ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.SetFetchMode("Schedules", FetchMode.Lazy)
Result = FiltersCriteria
.Future<Domain.Reminder>()
.ToList<Domain.Reminder>();
为什么它不能简单地使用 FetchMode.Lazy?为什么我必须使用 Future?如果我在我的模式中设置惰性模式,显然,一切都按我的预期工作。
谢谢。