【发布时间】:2016-04-06 16:20:38
【问题描述】:
我在使用 Linq NHibernate 查询时遇到了一些问题。
我需要获得一批带有详细信息的代金券。因为我需要迭代它们,所以我想在一次执行中获取所有信息。
我的查询如下:
return this.Session.Query<VouchersToIntegrate>()
.Take(query.BatchSize)
.Fetch(x => x.VoucherLines)
.ToList();
其中 VouchersToIntegrate 是凭证,VoucherLines 是每个凭证的行。
batchSize 现在设置为 50.000,但是当我返回所有对象时,我只得到 23XXX。这是因为我猜框架在从数据库(客户端)获取所有对象后在内部执行不同的操作。有没有其他方法可以在 SQL 服务器端使用 distinct 过滤器获取 50.000 个对象?
谢谢
【问题讨论】:
-
使用 NHibernate 迭代延迟加载的属性不会导致 n+1 加载问题,如果您已正确映射实体。见this more in depth explanation。因此,如果您因为遇到 n+1 加载问题而想要进行预加载,那么您应该阅读它。
标签: c# nhibernate fetch eager-loading skip-take