ユーザーが各パラメーターに複数の値を持つ複数のパラメーターを選択できる機能に取り組んでいます。エンティティがストアド プロシージャにマップされたエンティティ フレームワークである C# を使用して、アプリケーションでこの機能を設計する方法を見つけようとしています。セキュリティ上の理由により、私のアプリケーションは、ストアド プロシージャのみを持つ代理データベースを介してデータベースにアクセスする必要があります。したがって、私のエンティティは、挿入、更新、選択のストアド プロシージャにマップされます。最終的には、ユーザーが選択したフィルターをストアド プロシージャに渡して、データベースにクエリを実行する必要があります。私が考えた解決策の 1 つは、すべてのデータをビジネス レイヤーに取得し、linq を使用してさらにフィルター処理することです。しかし、これは理想的ではありません。これは、この種の複雑なクエリを実行するのにより適したデータベースよりもメモリ レートでフィルター処理されるデータの量が多いためです。linq を使用して動的クエリを構築するための投稿を見たことがありますが、これらの種類の投稿では、エンティティがテーブルにマップされているため、簡単になります。ここで何か助けていただければ幸いです。ありがとう、サーカル
1 に答える
0
EF (およびその点については LINQ) は、遅延実行を使用します。IQueryable (Google 検索時間?) を使用して動的クエリをかなり簡単に作成し、作成したオブジェクトにフィルター条件を作成できます (オブジェクトなしで実行できますが、再利用可能と考えてください)。
SQL sproc に関しては、フィルターを変更する可能性のあるすべてのアイテムを渡し、SQL をデータに対して動的に処理して結果セットを生成することで、そこで解決することもできます。
どちらを選ぶ?それは、コア コンピテンシーがグループ内のどこにあるかによって大きく異なります。私は主に親しみやすさから C# コードを好みます (sproc の作成に何年も費やしましたが、動的 sproc は王様の苦痛になる可能性があります)。
ここで注意しなければならないことの 1 つは、サーバーが簡単に調整できない動的クエリが作成されることです (SQL Server の統計のように、他の RDBMS も同様の概念を使用します)。たとえば、私が LINQ to SQL で見た問題の 1 つは、SQL のパフォーマンスが最適とは言えない動的クエリであり、DBA の多くの手を借りる必要があります。
于 2012-02-10T17:35:22.543 に答える