NHibernate性能:Session.Criteria vs LINQ in-memory

时间:2011-01-17 13:00:36

标签: c# linq nhibernate

根据复杂标准需要数据集时,最佳性能是什么?有两种选择:创建复杂的ICriteria或Session.Linq语句,或者使用来自根对象的LINQ,让NHibernate处理延迟加载。

选项1(使用会话):

var result = Session.Linq<Contractor>().Where(contractor => contractor.account == "bla@account.com)
//....
.Where(condition => condition.Orders.Any(condition))
//... more conditions

选项2(使用root对象进行“内存中”查询,这可能意味着将从SQL服务器中提取大型结果集):

var contractor = Session.Linq<Contractor>().Single(c => c.Id == 1);

contractor.Orders.SelectMany(o => o.NestedCollection)
.Where(c => c.List.Any(condition))
.Where(//..... more complex filtering;

内存中的变体不会在NHPRof中生成警告,但是,Session变体会生成警告,即过多的连接可能会使性能陷入困境。

1 个答案:

答案 0 :(得分:0)

取决于,但通常最好让数据库完成其工作,并急切地获取您所知道的所需内容。例外情况是fetching multiple associations