【问题标题】:NHibernate collection eager loading take countNHibernate 集合急切加载计数
【发布时间】: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


【解决方案1】:

没有办法用 NHibernate 的 LINQ 提供程序构造这个查询。

但是,您可以手动构建适当的 SQL 查询,然后使用 NHibernate 的“Native SQL”API 将其映射到实体:http://nhibernate.info/doc/nhibernate-reference/querysql.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多