为什么GetPaged()执行两个数据库调用?

时间:2010-01-05 22:06:13

标签: subsonic subsonic3

我对亚音速有点新(即评估3.0.0.3)并且在GetPaged(int pageIndex,int pageSize)中遇到了一个奇怪的行为。当我执行该方法时,它执行两次 SQL调用。有什么想法吗?

详细

假设我有一个200行的“Cultures”表。在我的代码中,我做了类似......

的事情
var sonicCollection = from c in RTE.Culture.GetPaged(1, 25)
                       select c;

现在,我希望这会执行一个查询,返回我的culture表中的前25个条目。当我看SQL分析器时,我看到两个查询运行。

首先这个 -

SELECT [dbo].[Cultures].[cultureCode], [dbo].[Cultures].[cultureName]
FROM [dbo].[Cultures]

然后这个 -

SELECT *
FROM     (SELECT ROW_NUMBER() OVER (
    ORDER BY cultureID ASC) AS Row, 
    [dbo].[Cultures].[cultureCode], [dbo].[Cultures].[cultureName]
 FROM [dbo].[Cultures]
)
AS PagedResults
WHERE  Row >= 1 AND Row <= 25

我希望第二个查询可以滚动,因为它是返回我礼貌要求亚音速的25行的那个。但是,第一个查询似乎返回200行(至少根据SQL分析器)。

任何想法发生了什么?

2 个答案:

答案 0 :(得分:1)

您只想使用RTE.Culture.GetPaged() - 它会为您运行分页查询。

答案 1 :(得分:1)

这是代码中的错误。代码实际上查询每个记录,然后迭代每个记录以进行计数。我在这里的github repo中创建了一个问题: https://github.com/subsonic/SubSonic-3.0/issues/259

您可以下载源代码,修复问题并轻松重新编译。我已经完成了这个并解决了我的问题。