0
collection.GetMulti(filter, 0, sorter, relations, path, 1, 10);

生成的 SQL:

    SELECT
        ...
    FROM
        ((((
                        [NewsDB].[dbo].[Article]
                        INNER JOIN [NewsDB].[dbo].[OnlineArticle] ON [NewsDB].[dbo].[Article].[ArticleID] = [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] 
                        )
                    INNER JOIN [NewsDB].[dbo].[CategoryOnlineArticle] ON [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] = [NewsDB].[dbo].[CategoryOnlineArticle].[OnlineArticleID] 
                    )
                INNER JOIN [NewsDB].[dbo].[Category] ON [NewsDB].[dbo].[Category].[CategoryID] = [NewsDB].[dbo].[CategoryOnlineArticle].[CategoryID] 
                )
            LEFT JOIN [NewsDB].[dbo].[OldOnlineArticle] ON [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] = [NewsDB].[dbo].[OldOnlineArticle].[OnlineArticleID] 
        ) 
    WHERE
        (
            (
                (
                    [NewsDB].[dbo].[Article].[IsDeleted] = @p1 
                    AND [NewsDB].[dbo].[Article].[IsArchive] = @p2 
                    AND [NewsDB].[dbo].[Article].[NavigateType] = @p3 
                    AND [NewsDB].[dbo].[Article].[Status] = @p4 
                    AND [NewsDB].[dbo].[OnlineArticle].[IsOnlinePublished] = @p5 
                    AND [NewsDB].[dbo].[OnlineArticle].[OnlinePublishDateUtc] <= @p6 
                ) 
                AND [NewsDB].[dbo].[OnlineArticle].[SiteNewsPortalID] = @p7 
                AND [NewsDB].[dbo].[Category].[IsDeleted] = @p8 
                AND [NewsDB].[dbo].[Category].[IsEnable] = @p9 
                AND [NewsDB].[dbo].[Category].[CategoryType] = @p10 
                AND [NewsDB].[dbo].[Category].[CategoryID] = @p11 
            ) 
        AND ( [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] IS NOT NULL )) 
    ORDER BY
        [NewsDB].[dbo].[OnlineArticle].[RefreshDateUtc] DESC,
        [NewsDB].[dbo].[OnlineArticle].[OnlinePublishDateUtc] DESC

我在生成的 SQL 中没有看到 OFFSET xxx FETCH xxx。

我还将兼容级别设置为SqlServerCompatibilityLevel.SqlServer2005.

如何使 OFFSET xxx FETCH 在生成的 SQL 中可用?请帮忙。

4

1 回答 1

0

OFFSET/FETCH在兼容性级别设置为 时使用SqlServer2012。查看更多信息,请参阅每种兼容模式的 SQL 差异

您在哪里查看生成的 SQL?确保您正在查看要执行的最终查询,因为您可能会在内置分页之前看到该查询。

最后,在某些情况下无法在服务器端进行分页,因此它是在客户端使用数据读取器执行的。引用文档

分页通常发生在服务器上,但是如果无法生成分页查询而不会在服务器上引起错误,LLBLGen Pro 运行时框架将切换到数据读取器级别的客户端分页。如果 SQL 查询中存在违反 DISTINCT 的构造,例如不与 DISTINCT 一起使用的类型或不在投影中的字段上的 order by,则会发生这种情况。datareader 级别的分页是高效的(它会丢弃要读取的页面之前的所有行,并在要读取的页面完全读取后停止读取数据)但是可能比服务器端的分页查询慢。

为了确定框架是否切换到客户端分页/不同过滤/行限制,它将向 ORMQueryExecution 跟踪器的 SQL 查询输出附加一个字符串,该字符串表示:“需要客户端分页”、“需要客户端不同过滤”和“需要客户端限制”,如果 ORMQueryExecution 跟踪器设置为级别 4(详细)

希望有帮助。顺便说一句,您可以使用LLBLGen Pro 论坛

于 2019-05-27T15:57:34.050 回答