Fetch.Join()在Fluent NHibernate中不工作

Fetch.Join()在Fluent NHibernate中不工作,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在关系的一侧有以下映射覆盖: public void Override(AutoMapping<ItemAsmtDetailDh> mapping) { mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fe

我在关系的一侧有以下映射覆盖:

public void Override(AutoMapping<ItemAsmtDetailDh> mapping)
{
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join();
}
public void覆盖(自动映射)
{
mapping.HasMany(x=>x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(前缀.下划线).Not.LazyLoad().Fetch.Join();
}
在关系的另一面,我有:

public void Override(AutoMapping<WAsmtDetail> mapping)
{
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}
public void覆盖(自动映射)
{
mapping.References(x=>x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}
当我使用ShowSql选项时,我看到它仍然为wasmtdealtures发出单独的select语句,这给了我一个可怕的“n+1选择”问题。为什么“.Not.LazyLoad().Fetch.Join()”被忽略


注意:我使用的是Fluent NHibernate 1.1版,而不是2.1版,因为新版本中有一个bug。(有关bug的详细信息,请参阅我的答案。)我使用的是NHibernate版本2.1.2.4000

加载数据的方式很可能不受映射中的
Fetch.Join()
的影响(如HQL或Linq)。从NHibernate文档中:

映射文档中定义的获取策略影响:

  • 通过Get()或Load()进行检索
  • 导航关联时隐式发生的检索
  • ICriteria查询
  • HQL查询是否使用了子选择获取

谢谢你的回复,克雷默。在我的情况下,我使用CreateCriteria在聚合根级别检索对象列表。聚合根比我问题中提到的“ItemAsmtDetailDh”类高2级。然后我删除ItemAsmtDetailDh的父项(1级以上)。NH从该点向下检索聚合的其余部分,以便将其删除。我认为这是一个通过关联导航检索的案例。