使用Entity Framework 7和SQL Server 2008进行分页

Kon*_*tin 21 asp.net-mvc paging sql-server-2008 entity-framework-core

我正在尝试使用分页(即.Skip(...).Take(...)在Entity Framework 7中.它适用于Microsoft SQL Server 2012和2014,但在SQL Server 2008上出现以下错误失败:

System.Data.SqlClient.SqlException(0x80131904):'OFFSET'附近的语法不正确.FETCH语句中NEXT选项的使用无效.

我已经发现它是EF版本6.1.2(http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html)的重大变化.但修复方法是将EDMX文件设置ProviderManifestToken属性修改为"2008".

问题是EF7目前只支持代码优先方案,因此没有任何EDMX.问题是:如何使用Entity Framework 7配置ASP.NET 5网站,以便为早于2012的SQL Server使用回退分页方法?

mes*_*sut 38

如果使用Edmx文件,则必须使用XML编辑器打开edmx文件并进行更改

ProviderManifestToken="2012" ==> ProviderManifestToken="2008"
Run Code Online (Sandbox Code Playgroud)

在第7行.

有关更多信息,请查看此博客文章:http: //erikej.blogspot.com.tr/2014/12/a-breaking-change-in-entity-framework.html


Joe*_*tte 14

我自己使用EF 7和sql server 2008遇到了这个问题.幸运的是,在EF 7的最新rc1版本中,你可以通过使用.UseRowNumberForPaging()来解决这个问题,如下例所示:

services.AddEntityFramework()
  .AddSqlServer()
  .AddDbContext<YourDbContext>(options =>
     options.UseSqlServer(configuration["Data:DefaultConnection:ConnectionString"])
                    // this is needed unless you are on mssql 2012 or higher
                    .UseRowNumberForPaging()
                );
Run Code Online (Sandbox Code Playgroud)

  • 我这样做了,我仍然遇到了上述错误. (2认同)

pwr*_*imo 5

此功能已在 EF Core 3.x 中删除UseRowNumberForPaging,被标记为已过时。但是,您可以使用EfCore3.SqlServer2008Query包来代替。Nuget 中有 2 个可用的软件包,一个适用于 >= .NET 5.0,另一个适用于 >= .NET 3.1

在此输入图像描述

用法:

 services.AddDbContext<MyDbContext>(o => 
       o.UseSqlServer(Configuration.GetConnectionString("Default"))
        .ReplaceService<IQueryTranslationPostprocessorFactory, SqlServer2008QueryTranslationPostprocessorFactory>());
Run Code Online (Sandbox Code Playgroud)