Fluent-NHibernate-Linq复合元件预加载

Fluent-NHibernate-Linq复合元件预加载,nhibernate,components,loading,eager,Nhibernate,Components,Loading,Eager,我们在项目中使用Fluent NHibernate LINQ和遗留数据库。 我们的场景是,我们有一个包含客户信息和地址的表。 我们在C#中创建了客户和地址作为单独的实体。地址再次引用邮政编码对象 在映射时,我们将地址映射为Customer的组件。现在我想在抓取客户时立即加载邮政编码(由地址引用),以避免N+1选择 当我试图写Fetch(customer=>customer.Address.ZipCode)时,它说它太复杂了。我不能执行Fetch(customer=>customer.Addres

我们在项目中使用Fluent NHibernate LINQ和遗留数据库。 我们的场景是,我们有一个包含客户信息和地址的表。 我们在C#中创建了客户和地址作为单独的实体。地址再次引用邮政编码对象

在映射时,我们将地址映射为Customer的组件。现在我想在抓取客户时立即加载邮政编码(由地址引用),以避免N+1选择

当我试图写
Fetch(customer=>customer.Address.ZipCode)
时,它说它太复杂了。我不能执行
Fetch(customer=>customer.Address)。然后执行Fetch(Address=>Address.ZipCode)
,因为地址和customer存储在同一个表中


我有办法解决这个问题吗

不幸的是,Linq提供商似乎无法处理这种情况。所以要么使用标准,要么使用QueryOverAPI

session.CreateCriteria<Customer>()
    .SetFetchMode("Address.ZipCode", FetchMode.Eager)
    .List();

session.QueryOver<Customer>()
    .Fetch(u => u.Address.ZipCode).Eager
    .List();
session.CreateCriteria()
.SetFetchMode(“Address.ZipCode”,FetchMode.Eager)
.List();
session.QueryOver()
.Fetch(u=>u.Address.ZipCode)
.List();
或者禁用映射中ZipCode的懒散加载