2015-05-01 11 views
18

Próbuję użyć stronicowania (to jest .Skip(...).Take(...) w Entity Framework 7. Działa poprawnie z Microsoft SQL Server 2012 i 2014, ale kończy się niepowodzeniem z następującym błędem na SQL Server 2008:Paging z Entity Framework 7 i SQL Server 2008

System.Data.SqlClient.SqlException (0x80131904):.. Niepoprawna składnia w pobliżu „przesunięcie” nieprawidłowym wykorzystaniem opcji Dalej w oświadczeniu FETCH

mam zorientowali się, że jest to zerwania zmiany wersji EF 6.1.2 (http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html), ale poprawka polega na zmodyfikowaniu atrybutu ProviderManifestToken pliku EDMX na "2008".

Problem polega na tym, że EF7 obsługuje obecnie tylko scenariusz kodu, więc nie ma tam żadnego EDMX. Pytanie brzmi: jak skonfigurować stronę ASP.NET 5 za pomocą Entity Framework 7, aby korzystać z metody stronicowania awaryjnego dla serwera SQL starszego niż 2012?

+0

proszę zobaczyć problem [# 1326] (https://github.com/aspnet/EntityFramework/issues/1326) i dodaj ewentualne komentarze. – bricelam

Odpowiedz

11

Napotkano ten problem samodzielnie przy użyciu EF 7 i serwera sql 2008. Na szczęście w najnowszej wersji EF 7 można rozwiązać ten problem za pomocą metody .UseRowNumberForPaging(), jak pokazano w tym przykładzie:

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

Zrobiłem to i wciąż napotykam na ten błąd. –

+0

Nie działa w RC 1. Linq "Skip" nadal próbuje wygenerować składnię OFFSET/FETCH NEXT. –

30

Jeśli używasz pliku Edmx, należy otworzyć plik edmx użyciu Edytora XML i zmienić

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

w linii 7.

Proszę spojrzeć na tym blogu o więcej informacji: http://erikej.blogspot.com.tr/2014/12/a-breaking-change-in-entity-framework.html

+0

Dzięki. Ten sam problem został rozwiązany, gdy moja lazurowa baza danych została pobrana w lokalnej bazie danych. –

+1

To zaoszczędziło mi tyle czasu i zasługuje na więcej uwagi. W moim przypadku moje środowisko programistyczne to SQL SERVER 2012, a moim środowiskiem QA jest 2008 R2. – Khan

+0

Jeśli zostanie zmieniony na 2008, czy nadal będzie działał z programem SQL Server 2012? –

3

Jest uszkodzony w RC 1. Muszę czekać, aby uzyskać RC 2.

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

+5

Bardzo przydatne łącze. Pomógł mi rozwiązać mój problem za pomocą: options.UżytkownikaSqlServer (połączenie, b => bZa pomocą UseNowNumberForPaging()); – marianc

+0

Bardzo pomocna! 'useRowNumberForPaging()' rozwiązał mój problem! – wtf512

Powiązane problemy