流畅的NHibernate Linq复杂组件渴望加载

时间:2011-07-13 12:46:35

标签: nhibernate components loading eager

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

在映射时,我们将Address映射为Customer的Component。现在我想在提取Customer时急切加载Zip Code(由Address引用),以避免N + 1选择。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

或者在Mappings中禁用ZipCode的LazyLoading