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

asp.net-mvc entity-framework-core paging sql-server-2008

我正在尝试使用分页(即.Skip(...).Take(...)在实体框架7中.Skip(...).Take(...)它适用于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使用回退分页方法?

一般承认的答案

我自己使用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()
                );

热门答案

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

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

在第7行。

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因