我发现了2个类似的问题:
根据此页面:
注意不要急切地同时获取多个集合属性。尽管此语句可以正常工作:
var employees = session.Query<Employee>() .Fetch(e => e.Subordinates) .Fetch(e => e.Orders).ToList();
它对数据库执行笛卡尔积查询,因此返回的总行数将是总下属乘以总订单。
可以说我有以下模型:
public class Person
{
public virtual int Id { get; private set; }
public virtual ICollection<Book> Books { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
使用 QueryOver/Linq(不返回笛卡尔积)急切地为所有人加载他们的书籍、文章和地址的最简单方法是什么?
谢谢
更新:
请参阅下面cremor的回答和Florian Lim在此线程中的回答。以下代码运行良好,只需往返数据库一次。
var persons = session.QueryOver<Person>()
.Future<Person>();
var persons2 = session.QueryOver<Person>()
.Fetch(x => x.Books).Eager
.Future<Person>();
var persons3 = session.QueryOver<Person>()
.Fetch(x => x.Articles).Eager
.Future<Person>();
var persons4 = session.QueryOver<Person>()
.Fetch(x => x.Addresses).Eager
.Future<Person>();