开发者

Why is GetPaged() Executing two database calls?

I'm a bit new to subsonic (i.e. evaluating 3.0.0.3) and have come across a strange behavior in GetPaged(int pageIndex, int pageSize). When I execute the method it does two SQL calls. Any ideas why ?

Details

Lets say I have a "Cultures" table with 200 rows. In my code I do something like ...

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

Now, I would expect this executes a single query returning the first 25 entries in my cultures table. 开发者_如何转开发When I watch SQL profiler I see two queries run by.

First this--

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

Then This--

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

I expect the 2nd query to roll by, as it is the one returning the 25 rows I politely requested of subsonic. The first query, however, appears to return 200 rows (at least according to SQL profiler).

Any ideas what's going on?


It's a bug in the code. The code actually queries every record and then iterates over each one for the count. I've created an issue in the github repo here: https://github.com/subsonic/SubSonic-3.0/issues/259

You can download the source, fix the issue and recompile pretty easily. I've done this and its fixed my issue.


You just want to use RTE.Culture.GetPaged() - it runs the paged query for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜