Пейджинг с Entity Framework 7 и SQL Server 2008

Я пытаюсь использовать подкачку (то есть .Skip(...).Take(...) в Entity Framework 7. Он работает нормально с Microsoft SQL Server 2012 и 2014, но не работает со следующей ошибкой SQL Server 2008:

System.Data.SqlClient.SqlException(0x80131904): неправильный синтаксис рядом с "СМЕЩЕНИЕ". Недопустимое использование опции NEXT в инструкции FETCH.

Я понял, что это нарушение в EF версии 6.1.2 (http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html). Но исправление заключается в том, чтобы изменить атрибут файла EDMX файла ProviderManifestToken на "2008".

Проблема в том, что в настоящее время EF7 поддерживает только сценарий с кодовым кодом, поэтому EDMX отсутствует. Возникает вопрос: как настроить веб-сайт ASP.NET 5 с Entity Framework 7 на использование подстановочного подкатегория для SQL Server старше 2012 года?

Ответы

Ответ 1

Я сам столкнулся с этой проблемой, используя 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()
                );

Ответ 2

Если вы используете файл Edmx, вы должны открыть файл edmx с помощью редактора XML и изменить

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

в строке 7.

Пожалуйста, взгляните на это сообщение в блоге для получения дополнительной информации: http://erikej.blogspot.com.tr/2014/12/a-breaking-change-in-entity-framework.html