C# NHibernate 3和具有延迟负载的未来

C# NHibernate 3和具有延迟负载的未来,c#,nhibernate,nhibernate-criteria,C#,Nhibernate,Nhibernate Criteria,我有一个实体提醒,其中包含一组计划(请参见映射)。 我不希望我的收集计划延迟加载,因此我将属性设置为false: <set access="field.pascalcase-underscore" cascade="all-delete-orphan" inverse="true" lazy="false" name="Schedules" mutable="true"> <key foreign-key="FK_Schedules_Reminders">

我有一个实体提醒,其中包含一组计划(请参见映射)。 我不希望我的收集计划延迟加载,因此我将属性设置为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);
ICriteria FiltersCriteria=session.CreateCriteria();
FiltersCriteria.SetFetchMode(“Schedules”,FetchMode.Lazy);
运行我的查询时,我注意到Nhibernate正在运行对提醒的查询,然后,对于每个提醒,它都在运行单个查询以获取计划。
以下是我使用的代码:

ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.SetFetchMode("Schedules", FetchMode.Lazy)
Result = FiltersCriteria.List<Domain.Reminder>();
ICriteria FiltersCriteria=session.CreateCriteria();
FiltersCriteria.SetFetchMode(“计划”,FetchMode.Lazy)
结果=FiltersCriteria.List();
经过一点努力,我使用Future更改了代码,一切都很顺利:

ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.SetFetchMode("Schedules", FetchMode.Lazy)
Result = FiltersCriteria
    .Future<Domain.Reminder>()
    .ToList<Domain.Reminder>();
ICriteria FiltersCriteria=session.CreateCriteria();
FiltersCriteria.SetFetchMode(“计划”,FetchMode.Lazy)
结果=过滤器标准
.Future()
.ToList();
为什么仅仅使用FetchMode.Lazy不起作用?为什么我要用未来? 如果我在我的模式中设置了惰性模式,显然,一切都会如我所期望的那样工作


谢谢。

您不能用
SetFetchMode
覆盖映射中的
lazy=“false”


就个人而言,我建议您不要使用
lazy=“false”
。推荐阅读:

谢谢你的回答。我想弄明白的是,为什么在我的第一个示例中(没有未来),它没有覆盖?!您说过不喜欢使用lazy=false。如果要加载每个订单的所有详细信息,您会怎么做?谢谢。@LeftyX:我会在集合上使用
批量大小
,使用合理的值,或者手动调用(有或没有未来),如前所述,如果要以非惰性模式加载实体和详细信息实体,您会提出什么建议?@LeftyX:根据您的查询方法,您可以使用
SetFetchMode
/
Fetch