2013-08-20 8 views
9

OFFSET & FETCH FIRSTEntityFramework 5とLinq to SQLでは、SQL Server 2012に導入されたキーワードがサポートされていますか? SELECT * FROM tables ORDER BY stime DESC OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLYを使用する場合には50%の性能向上を見せてEntity Framework 5でSQL ServerのOFFSETおよびFETCH FIRSTを使用する方法は?

代わりのvar a= db.table.Skip(0).Take(10);

+3

EntityFramework(6を含む)ではまだサポートされていません。 – user2674389

+4

ここにその機能に投票することができます:https://entityframework.codeplex.com/workitem/961 – ErikEJ

+2

実際には、機能がすでにEFソース管理https://entityframework.codeplex.com/SourceControl/network/にコミットされているのがわかりますforks/BrandonDhler/EntityFramework/contribution/6237 –

答えて

2

短い答えはありません、それはEF5ではサポートされていませんが、Entity Frameworkのバージョン6.1.2は、ちょうどnoted on the ADO.NET blogとして、リリースされました。 6.1.2の新機能の1つは、OFFSET..FETCH SQL Server 2012+ページング構文のサポートです。

Entity FrameworkのようなORMを購入すると、(完全に正当な理由で)クエリ生成を調達できなくなります。 EFがRow_Number()またはより新しいフェッチ/オフセットで「古い」CTEスタイルのクエリを使用するかどうかは実装の詳細です。 MicrosoftはいつでもEFコードを更新し、どちらかを使用するようにクエリ生成を変更できます。 Reference

クエリ生成を制御したい場合は、次のいずれか

利用EFの「ストアドプロシージャマッピングの能力を使用ストアドプロシージャ 直接EF(私はかなり頻繁に行う何か)ADO/SQLを記述して 自分自身か、より大きい/ PetaPocoのようなより限定されたマイクロデバイスを使用してください それは重要ですか?

まあ、開発者は、新しい構文は、 歓迎救済になるクエリを書くことです。一方、古いCTEメソッドと新しい 構文の間には、実際のパフォーマンスの差が であるようには見えません。だからEFの視点から - 実際はそうではありません。我々はEFを使用してかなりのオーバーヘッドを受ける 、ページングの方法はおそらくあなたの休憩ではないでしょう ポイント。 Refrance

関連する問題