2012-04-20 4 views
9

SQL Server 2012에는 많은 양의 페이징을 사용하는 응용 프로그램의 성능에 큰 영향을 줄 수있는 FETCH 및 OFFSET을 사용한 페이징에 대한보다 효율적인 메커니즘이 도입되었습니다. Entity Framework 5가이를 지원합니까? EF를 사용하여 Take + Skip을 사용하여 페이지를 작성하면 EF가 SQL Server 2012를 대상으로하는 경우 LINQ 쿼리가 새로운 2012 TSQL로 변환됩니까?Entity Framework 및 SQL Server 2012 페이징

+0

더 효율적이지 않습니다. 더 읽기 쉽습니다. –

+0

SQL Server에서 반환하는 페이로드를 줄이면 가져 오기 및 오프셋 성능이 향상됩니다. http://www.mssqltips.com/sqlservertip/2696/comparing-performance-for-different-sql-server-paging-methods/ – Judo

+0

@Judo ROW_NUMBER 기반 접근 방식은 동일한 결과 집합을 반환합니다. 그러나 여러 가지 이유로 성능 이점이있을 수 있습니다. – John

답변

9

EF 5는이 기능을 지원하지 않습니다. 실제로 EF에서는 SQL Serve 2012 기능을 사용할 수 없습니다. 이 기능을 Data UserVoice에 투표하면 ADO.NET 팀 제품 백 로그에서 위로 이동할 수 있습니다.

11

@ Ladislav가 말했듯이 EF 5는 OFFSET & FETCH를 지원하지 않습니다. 그렇게 말하면서 약간의 관점을 추가하고 싶었습니다. 나는 그것이별로 중요하지 않다고 생각한다.

Entity Framework와 같은 ORM을 구입하면 완벽한 생성을 위해 쿼리 생성을 소홀히합니다. EF가 Row_Number() 또는 더 최신 Fetch/Offset과 함께 '이전'CTE 스타일 쿼리를 사용하는지 여부는 구현 세부 사항입니다. Microsoft는 언제든지 EF 코드를 업데이트하고 둘 중 하나를 사용하도록 쿼리 생성을 변경할 수 있습니다. 쿼리 생성을 제어하려면

, 당신도 : EF와

  • 를 사용하여 저장 프로 시저를 직접

    • 사용 EF의 '저장 프로 시저 매핑 능력 (뭔가 내가 할이 꽤 자주)
    • 쓰기 더 제한된 대규모 같은 마이크로-ORM ADO를/SQL 자신, 또는
    • 사용/PetaPoco

    그럼 상관 있니?

    글을 쓰는 개발자에게는 새로운 구문이 환영받을 것입니다. 반면에 doesn't appear에는 기존 CTE 방법과 새로운 구문 인 performance difference between이 있습니다. 그래서 EF의 관점에서 - 실제로는 아닙니다. 우리는 significant overhead EF를 사용하여, 페이징의 방법은 아마도 당신의 휴식 지점되지 않습니다.