2015-05-01 18 views
18

Sto tentando di utilizzare il paging (ovvero .Skip(...).Take(...) in Entity Framework 7. Funziona correttamente con Microsoft SQL Server 2012 e 2014, ma non riesce con il seguente errore su SQL Server 2008:Cercapersone con Entity Framework 7 e SQL Server 2008

System.Data.SqlClient.SqlException (0x80131904):.. la sintassi non corretta in prossimità 'OFFSET' utilizzo non valido dell'opzione AVANTI nell'istruzione FETCH

ho capito che si tratta di un modifica della versione 6.1.2 di EF (http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html), ma la correzione consiste nel modificare l'attributo ProviderManifestToken del file EDMX in modo da "2008".

Il problema è che EF7 attualmente supporta solo lo scenario code-first, quindi non c'è nessun EDMX in circolazione. La domanda è: come configurare il sito Web ASP.NET 5 con Entity Framework 7 per utilizzare l'approccio di impaginazione fallback per SQL Server precedente al 2012?

+0

Si veda problema [# 1326] (https://github.com/aspnet/EntityFramework/issues/1326) e aggiungi eventuali commenti che potresti avere. – bricelam

risposta

11

Ho riscontrato questo problema utilizzando EF 7 e SQL Server 2008. Fortunatamente nell'ultima versione rc1 di EF 7 è possibile risolvere questo problema utilizzando .UseRowNumberForPaging() come mostrato in questo esempio:

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

Ho fatto questo, e sto ancora incontrando il detto errore. –

+0

Non funziona in RC 1. Linq "Skip" tenta ancora di generare la sintassi OFFSET/FETCH NEXT. –

30

Se si utilizza il file EDMX, è necessario aprire il file edmx utilizzando l'editor XML e modificare

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

in linea 7.

Si prega di dare un'occhiata a questo post del blog per ulteriori informazioni: http://erikej.blogspot.com.tr/2014/12/a-breaking-change-in-entity-framework.html

+0

Grazie. Lo stesso problema risolto per quando il mio database azure è stato prelevato dal database locale. –

+1

Questo mi ha salvato così tanto tempo e questo merita molta più attenzione. Nel mio caso, il mio ambiente di sviluppo era SQL SERVER 2012 e il mio ambiente QA è 2008 R2. – Khan

+0

Se è stato modificato in 2008, funzionerà ancora con SQL Server 2012? –

3

è rotto in RC 1. Devo aspettare per ottenere RC 2.

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

+5

Link molto utile. Mi ha aiutato a risolvere il mio problema usando: options.UseSqlServer (connection, b => b.UseRowNumberForPaging()); – marianc

+0

Molto utile! 'useRowNumberForPaging()' ha risolto il mio problema! – wtf512

Problemi correlati