7

NHibernate を ORM として使用して、VS 2012 で WebApi プロジェクトを作成しました。Odata サポートを有効にする予定です。そこで、データベースのテーブルからエンティティのリストを返す単一の Get メソッドを持つテスト コントローラーを作成しました。

すべて正常に動作し、OData を使用して結果をフィルター処理したり並べ替えたりできます。問題は、データベースからコントローラーに返されるデータの量を制限する方法が見つからなかったことです。このテーブルには何百万ものレコードがあります。初期化。

PageSize属性のプロパティを使用するQueryableと、クライアントに返されるデータの量が制限されるように見えますが、DB から返されるデータの量は制限されません。

Take(n)返す前に get メソッドの内部に適用しようとしましたIQueryableが、DB から返される結果が制限されますが、OData フィルタリングが壊れます。最初の n 個の結果にないエンティティをクエリしようとすると、空のコレクションを返すだけです。

これを達成するために ODataのパラメーターを使用できることは知っていますが、$Top何千、何百万ものレコードを不必要に持ち込まないようにするために、それを提供するクライアント/コンシューマーに依存したくありません。使用する。

また、クライアントがクエリ文字列に Top パラメーターを提供したかどうかを手動で確認し、OData 変換を Queryable に適用してから、変換されたクエリにメソッドを適用しようとしましたTake(n)。このアプローチにより、OData を介して任意のエンティティをフィルター処理できましたが、$Skip=nパラメーターを使用すると再び空のコレクションが返されるため、ページネーションが壊れます。

では、OData サポートを壊さずに、DB からフェッチされる結果を確実に制限する方法はありますか?

4

1 に答える 1