我数学不好,但是我大概知道笛卡尔积是什么。
这是我的情况(简化):
public class Project{
public IList<Partner> Partners{get;set;}
}
public class Partner{
public IList<PartnerCosts> Costs{get;set;}
public IList<Address> Addresses{get;set;}
}
public class PartnerCosts{
public Money Total{get;set;}
}
public class Money{
public decimal Amount{get;set;}
public int CurrencyCode{get;set;}
}
public class Address{
public string Street{get;set;}
}
我的目标是有效地加载整个项目。
问题当然是:
- 如果我尝试急切地加载合作伙伴及其成本,查询会返回无数行
- 如果我惰性地加载Partner.Costs,数据库会收到请求垃圾邮件(这比第一种方法稍微快一点)
根据我的阅读,常见的解决办法是使用MultiQueries,但我有点不理解。
因此,我希望通过这个具体的例子来学习。
如何有效地加载整个项目?
P.s. 我正在使用NHibernate 3.0.0。
请不要发布使用HQL或字符串风格的Criteria API方法的答案。
QueryOver
将是完美的。 - Arnis Lapsa