2013-08-20 7 views
9

È OFFSET & FETCH FIRST le parole chiave introdotte in SQL Server 2012 sono supportate in EntityFramework 5 e da Linq a SQL?Come utilizzare SQL Server OFFSET e FETCH FIRST con Entity Framework 5?

E 'che mostra il miglioramento delle prestazioni del 50% quando si utilizza SELECT * FROM tables ORDER BY stime DESC OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY invece di var a= db.table.Skip(0).Take(10);

+3

Non ancora supportato in EntityFramework (incluso 6). – user2674389

+4

Puoi votare per quella funzione qui: https://entityframework.codeplex.com/workitem/961 – ErikEJ

+2

In realtà, come vedo, la funzionalità è già stata assegnata al controllo sorgente EF https://entityframework.codeplex.com/SourceControl/network/ forchette/BrandonDahler/EntityFramework/contribution/6237 –

risposta

2

Breve risposta è no, non è supportato in EF5, ma la versione 6.1.2 di Entity Framework è stato appena rilasciato, come noted on the ADO.NET blog. Una delle nuove funzionalità in 6.1.2 è il supporto per la sintassi di impaginazione OFFSET..FETCH SQL Server 2012+.

Quando si acquista in un ORM come Entity Framework, si ottiene la generazione della query (per motivi perfettamente validi). Se EF usa la query di stile CTE "vecchio" con Row_Number() o il nuovo Fetch/Offset è un dettaglio di implementazione. Microsoft potrebbe aggiornare il codice EF in qualsiasi momento e modificare la generazione della query per utilizzare l'una o l'altra. Reference

Se si desidera che il controllo sulla generazione di query, è uno:

Usa EF 'stored procedure di mappatura' capacità di utilizzare le stored procedure direttamente con EF (cosa che faccio molto spesso) scrivere l'ADO/SQL o usa un micro-orm più limitato come massiccio/PetaPoco So importa?

Bene, per una query di scrittura da parte dello sviluppatore la nuova sintassi sarà un sollievo di benvenuto . D'altra parte, non sembra che ci sia una differenza di prestazioni reale tra il vecchio metodo CTE e la nuova sintassi . Quindi dal punto di vista di EF - non proprio. Abbiamo un significativo overhead con EF, il metodo di paging probabilmente non sarà il tuo punto di rottura . Refrance