2011-07-13 77 views
2

我们在使用遗留数据库的项目中使用流利的NHibernate LINQ。 我们的场景是,我们有一个客户信息与地址表。 我们在C#中将客户和地址创建为单独的实体。地址再次引用邮政编码对象。Fluent NHibernate Linq Complex Component Eager Loading

在映射时,我们已将地址映射为客户的组件。现在我想在提取客户的同时加载Zip Code(由Address引用),以避免N + 1选择。

当我试图写Fetch(customer => customer.Address.ZipCode)它说它太复杂了。我不能这样做Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode),因为Address与Customer存储在同一个表中。

有什么办法可以解决这个问题吗?

回答

2

不幸的是,似乎Linq供应商不能处理这种情况。因此,无论您使用标准或QueryOver API

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

session.QueryOver<Customer>() 
    .Fetch(u => u.Address.ZipCode).Eager 
    .List(); 

或者在映射

邮编的禁用惰性加载