ef6不支持sqlserver 2008的offset语句分页解决

一、 问题

项目中如果使用了EF6,数据库是2008,而分页会收到类似如下的错误提示:

{
  "Depth": 0,
  "ClassName": "",
  "Message": "Incorrect syntax near 'OFFSET'.\r\nInvalid usage of the option NEXT in the FETCH statement.",
  "Source": "Core .Net SqlClient Data Provider",
}

二、原因

通过问题描述可以分析是数据库SQL server 2008 R2版本SQL语句不支持关键字OFFSET,NEXT,因为这两个关键字是SQL server 2012以后的新特性。

三、解决

1、在.net Framework中,如果是dbFirst方式,可以通过修改edmx文件进行解决,将ProviderManifestToken属性设置为"2008",在第7行。

ProviderManifestToken="2012" ==> ProviderManifestToken="2008"

2、在.net Core中,通过配置.UseRowNumberForPaging() 即配置用row number SQL关键字进行分页。

public void ConfigureServices(IServiceCollection services) 
{
    services.AddDbContext<ATreeContext> (options =>
        options.UseSqlServer(_config["ConnectionStrings:DefaultConnection"], p => p.UseRowNumberForPaging ()));
}

参考:

https://cloud.tencent.com/developer/ask/sof/55856

https://www.cnblogs.com/atree/p/netcroe-EF-SQL-Server-OFFSET-NEXT-PAGE.html

posted on 2022-12-27 09:30  静以修身俭以养德  阅读(368)  评论(1编辑  收藏  举报

导航