2

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

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

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

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

4

1 回答 1

2

不幸的是,Linq-provider 似乎无法处理这种情况。因此,您要么使用条件,要么使用 QueryOver API

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

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

或者在 Mappings 中禁用 ZipCode 的 LazyLoading

于 2011-12-14T14:54:47.957 回答