SQL Server 2012 では、FETCH と OFFSET を使用したより効率的なページング メカニズムが導入されています。これは、多くのページングを使用するアプリのパフォーマンスに大きな影響を与える可能性があります。Entity Framework 5 はこれをサポートしていますか? EF が SQL Server 2012 をターゲットにしている場合、Take + Skip を使用して EF を使用してページングする場合、LINQ クエリは新しい 2012 TSQL に変換されますか?
2 に答える
@Ladislav が言ったように、EF 5 は OFFSET と FETCH をサポートしていません。そうは言っても、私は少し視点を追加したいと思いました。あまり重要ではないと思います。
Entity Framework のような ORM を購入すると、クエリの生成を外部に委託することになります (完全に正当な理由により)。EF が「古い」 CTE
スタイルのクエリを使用するRow_Number()
か、新しいFetch
/を使用するかOffset
は、実装の詳細です。Microsoft は、任意の時点で EF コードを更新し、クエリの生成を変更して、どちらか一方を使用することができます。
クエリの生成を制御するには、次のいずれかを行います。
- EF の「ストアド プロシージャ マッピング」機能を使用する
- ストアド プロシージャを EF で直接使用する (私が頻繁に行うこと)
- ADO/SQL を自分で作成する、または
- Massive/PetaPoco のようなより制限されたマイクロオームを使用する
それで、それは問題ですか?
クエリを作成する開発者にとって、新しい構文は歓迎すべき安心となるでしょう。一方、古い CTE メソッドと新しい構文の間に実際のパフォーマンスの違いがあるようには見えません。EF の観点から言えば、そうではありません。EF を使用するとかなりのオーバーヘッドが発生します。ページングの方法は、おそらくブレーク ポイントにはなりません。
EF 5 はこの機能をサポートしていません。実際、EF では SQL Server 2012 の機能を利用できないと思います。Data UserVoiceでこの機能に投票して、ADO.NET チームの製品バックログの上位に移動できます。