nhibernate考虑不要采取尽可能多的措施

时间:2017-03-07 07:35:10

标签: nhibernate

我有这段代码

var items = query.Skip(0).Take(25).List();

我想要的是我从我的列表中获得25个入口(列表得到402入口)。 这次电话之后,我从未进入过25次。有人知道为什么吗?

1 个答案:

答案 0 :(得分:3)

.Take().Skip()位于数据库端(例如,在SQL Server上 - Implement paging (skip / take) functionality with this query)转换为类似这样的内容

SELECT col1, col2, ...
 FROM ...
 WHERE ... 
 ORDER BY 
OFFSET      0 ROWS       -- skip  0 rows
FETCH NEXT 25 ROWS ONLY; -- take 25 rows

如果我们的 query 与一个TABLE (无JOIN)相关,那就永远有效。即许多行将导致结果列表中的许多C#项

但是如果一个查询使用JOIN,加入一些集合,我们仍会在数据库端获得25行..

parent_id, child_id
        1,       10      
        1,       11      
        2,       12      
        2,       13      
        ...
        -- 25 rows

但是这些会导致更少的根实体(参见父1和2有4行)。在转型过程中,这些将仅在少数父母中转换,其中收集的物品数量非常不确定

我的建议是:

  

在需要分页时不要加入集合。决不。始终在与 star schema (多对一)相关的联接页面上