2013-08-20 40 views
9

OFFSET & FETCH FIRST từ khóa, được giới thiệu trong SQL Server 2012 được hỗ trợ trong EntityFramework 5 và LINQ to SQL?Làm thế nào để sử dụng SQL Server OFFSET & FETCH FIRST với Entity Framework 5?

Nó cho thấy sự cải thiện hiệu suất 50% khi sử dụng SELECT * FROM tables ORDER BY stime DESC OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY thay vì var a= db.table.Skip(0).Take(10);

+3

Chưa được hỗ trợ trong EntityFramework (bao gồm 6). – user2674389

+4

Bạn có thể bỏ phiếu cho tính năng đó tại đây: https://entityframework.codeplex.com/workitem/961 – ErikEJ

+2

Thực tế khi tôi thấy chức năng đã được cam kết với kiểm soát nguồn EF https://entityframework.codeplex.com/SourceControl/network/ dĩa/BrandonDahler/EntityFramework/đóng góp/6237 –

Trả lời

2

Ngắn Câu trả lời được Không, nó không được hỗ trợ trong EF5, nhưng Version 6.1.2 của Entity Framework vừa được phát hành, như noted on the ADO.NET blog. Một trong những tính năng mới trong 6.1.2 là hỗ trợ cú pháp phân trang cú pháp SQL Server 2012+ OFFSET..FETCH.

Khi bạn mua vào ORM như Entity Framework, bạn đang tìm nguồn cung ứng tạo truy vấn của bạn (vì lý do hoàn toàn hợp lệ). Cho dù EF sử dụng truy vấn kiểu CTE cũ hơn với Row_Number() hoặc Fetch/Offset mới hơn là một chi tiết thực hiện. Microsoft có thể cập nhật mã EF tại bất kỳ thời điểm nào và thay đổi thế hệ truy vấn để sử dụng mã này hoặc cách khác. Reference

Nếu bạn muốn kiểm soát thế hệ truy vấn, bạn có:

Sử dụng EF của 'bản đồ stored procedure' khả năng sử dụng thủ tục lưu trữ trực tiếp với EF (cái gì tôi làm khá thường xuyên) viết ADO/SQL bản thân bạn, hoặc sử dụng một vi mô giới hạn hơn như lớn/PetaPoco Vì vậy, không quan trọng?

Vâng, đối với nhà phát triển viết truy vấn, cú pháp mới sẽ là giảm giá chào mừng . Mặt khác, nó không xuất hiện rằng có một sự khác biệt hiệu suất thực sự thực giữa phương pháp CTE cũ và cú pháp mới . Vì vậy, từ quan điểm của EF - không thực sự. Chúng tôi phải chịu một khoản chi phí quan trọng là bằng EF, phương pháp phân trang có thể sẽ không phải là điểm ngắt của bạn . Refrance