2015-05-01 16 views
18

Tôi đang cố gắng sử dụng phân trang (có nghĩa là .Skip(...).Take(...) trong Khuôn khổ thực thể 7. Nó hoạt động OK với Microsoft SQL Server 2012 và 2014, nhưng không thành công với lỗi sau trên SQL Server 2008:Phân trang với Entity Framework 7 và SQL Server 2008

System.Data.SqlClient.SqlException (0x80131904):.. cú pháp sai gần 'OFFSET' sử dụng không hợp lệ của các tùy chọn tiếp theo trong báo cáo kết quả FETCH

tôi đã tìm ra rằng nó là một thay đổi đột ngột trong phiên bản EF 6.1.2 (http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html) Nhưng khắc phục là sửa đổi thuộc tính ProviderManifestToken của tập tin EDMX thành "2008".

Vấn đề là EF7 hiện chỉ hỗ trợ kịch bản mã đầu tiên, do đó không có bất kỳ EDMX nào ngoài đó. Câu hỏi đặt ra là: làm thế nào để cấu hình ASP.NET 5 trang web với Entity Framework 7 để sử dụng phương pháp tiếp cận pagination dự phòng cho SQL Server cũ hơn 2012?

+0

Xin xem vấn đề [# 1326] (https://github.com/aspnet/EntityFramework/issues/1326) và thêm bất kỳ nhận xét nào bạn có thể có. – bricelam

Trả lời

11

Tôi gặp sự cố này khi sử dụng EF 7 và máy chủ sql 2008. May mắn thay trong phiên bản RC1 mới nhất của EF 7, bạn có thể giải quyết vấn đề này bằng cách sử dụng .UseRowNumberForPaging() như trong ví dụ sau:

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

Tôi đã làm điều này và tôi vẫn gặp phải lỗi đã nói. –

+0

Không hoạt động trong RC 1. LINQ "Bỏ qua" vẫn cố tạo cú pháp OFFSET/FETCH NEXT. –

30

Nếu bạn sử dụng tập tin EDMX, bạn phải mở tập tin edmx sử dụng XML Editor và thay đổi

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

phù 7.

Hãy xem ở bài viết trên blog này để biết thêm thông tin: http://erikej.blogspot.com.tr/2014/12/a-breaking-change-in-entity-framework.html

+0

Cảm ơn. Cùng một vấn đề được giải quyết khi cơ sở dữ liệu Azure của tôi được lấy tại cơ sở dữ liệu cục bộ. –

+1

Điều này đã cứu tôi rất nhiều thời gian và điều này xứng đáng được chú ý nhiều hơn. Trong trường hợp của tôi, môi trường phát triển của tôi là SQL SERVER 2012 và môi trường QA của tôi là 2008 R2. – Khan

+0

Nếu nó thay đổi thành năm 2008, nó vẫn hoạt động với SQL Server 2012? –

3

Nó bị hỏng trong RC 1. Gotta chờ đợi để có được RC 2.

https://github.com/aspnet/EntityFramework/issues/4616

+5

Liên kết rất hữu ích. Nó đã giúp tôi giải quyết vấn đề của tôi bằng cách sử dụng: options.UseSqlServer (kết nối, b => b.UseRowNumberForPaging()); – marianc

+0

Rất hữu ích! 'useRowNumberForPaging()' đã giải quyết được vấn đề của tôi! – wtf512

Các vấn đề liên quan