Entity Framework и пейджинг SQL Server 2012

В SQL Server 2012 представлен более эффективный механизм разбиения по страницам с использованием FETCH и OFFSET, что может сильно повлиять на производительность приложений, активно использующих разбиение по страницам. Поддерживает ли Entity Framework 5 это? Итак, если я использую EF для страницы с помощью Take + Skip, будут ли запросы LINQ переведены в новый TSQL 2012 года, если EF нацелен на SQL Server 2012?


person Judo    schedule 20.04.2012    source источник
comment
Не более эффективно. Более читаемый.   -  person O.O    schedule 31.08.2013
comment
Fetch и Offset имеют преимущество в производительности, поскольку они уменьшают полезную нагрузку, возвращаемую SQL Server /" rel="nofollow noreferrer">mssqltips.com/sqlservertip/2696/   -  person Judo    schedule 01.09.2013
comment
Подходы на основе @Judo ROW_NUMBER возвращают один и тот же набор результатов. Однако могут быть преимущества в производительности по разным причинам.   -  person John    schedule 23.11.2016
comment
Любой, кто использует эту функцию, должен всегда обеспечивать полный порядок, см. это: заголовок stackoverflow.com/questions/40766097/   -  person John    schedule 23.11.2016


Ответы (2)


EF 5 не поддерживает эту функцию — на самом деле я думаю, что ни одна из функций SQL Server 2012 недоступна в EF. Вы можете проголосовать за эту функцию на странице Data UserVoice, чтобы переместить его вверх в журнале невыполненных работ команды ADO.NET.

person Ladislav Mrnka    schedule 20.04.2012

Как сказал @Ladislav, EF 5 не поддерживает OFFSET & FETCH. С учетом сказанного, я хотел добавить немного перспективы. Я не думаю, что это должно иметь большое значение.

Когда вы покупаете ORM, например Entity Framework, вы берете на себя генерацию запросов (по вполне уважительным причинам). Использует ли EF «старый» запрос в стиле CTE с Row_Number() или более новый Fetch/Offset — это деталь реализации. Microsoft может обновить код EF в любой момент и изменить генерацию запроса, чтобы использовать тот или иной вариант.

Если вы хотите контролировать генерацию запросов, вы можете:

  • Используйте возможность EF «отображение хранимых процедур»
  • Используйте хранимые процедуры непосредственно с EF (что я делаю довольно часто)
  • написать ADO/SQL самостоятельно или
  • используйте более ограниченную микроформу, такую ​​как массив/PetaPoco

Так это важно?

Что ж, для разработчика, пишущего запросы, новый синтаксис станет долгожданным облегчением. С другой стороны, это не отображается, что существует реальное разница в производительности между старым методом CTE и новым синтаксисом. Так что с точки зрения EF - не совсем так. Мы берем на себя значительные накладные расходы при использовании EF, вероятно, метода пейджинга не будет вашей точкой останова.

person EBarr    schedule 24.04.2012