В SQL Server 2012 представлен более эффективный механизм разбиения по страницам с использованием FETCH и OFFSET, что может сильно повлиять на производительность приложений, активно использующих разбиение по страницам. Поддерживает ли Entity Framework 5 это? Итак, если я использую EF для страницы с помощью Take + Skip, будут ли запросы LINQ переведены в новый TSQL 2012 года, если EF нацелен на SQL Server 2012?
Entity Framework и пейджинг SQL Server 2012
Ответы (2)
EF 5 не поддерживает эту функцию — на самом деле я думаю, что ни одна из функций SQL Server 2012 недоступна в EF. Вы можете проголосовать за эту функцию на странице Data UserVoice, чтобы переместить его вверх в журнале невыполненных работ команды ADO.NET.
Как сказал @Ladislav, EF 5 не поддерживает OFFSET & FETCH. С учетом сказанного, я хотел добавить немного перспективы. Я не думаю, что это должно иметь большое значение.
Когда вы покупаете ORM, например Entity Framework, вы берете на себя генерацию запросов (по вполне уважительным причинам). Использует ли EF «старый» запрос в стиле CTE
с Row_Number()
или более новый Fetch
/Offset
— это деталь реализации. Microsoft может обновить код EF в любой момент и изменить генерацию запроса, чтобы использовать тот или иной вариант.
Если вы хотите контролировать генерацию запросов, вы можете:
- Используйте возможность EF «отображение хранимых процедур»
- Используйте хранимые процедуры непосредственно с EF (что я делаю довольно часто)
- написать ADO/SQL самостоятельно или
- используйте более ограниченную микроформу, такую как массив/PetaPoco
Так это важно?
Что ж, для разработчика, пишущего запросы, новый синтаксис станет долгожданным облегчением. С другой стороны, это не отображается, что существует реальное разница в производительности между старым методом CTE и новым синтаксисом. Так что с точки зрения EF - не совсем так. Мы берем на себя значительные накладные расходы при использовании EF, вероятно, метода пейджинга не будет вашей точкой останова.