3

ASP.NET MVC4 Web アプリケーションを開発しています。データ アクセスにはエンティティ フレームワークを使用します。多くのページにはグリッドが含まれています。これらは、ページング、ソート、フィルタリング、およびグループ化をサポートする必要があります。パフォーマンスのために、グリッドのフィルタリング、並べ替え、ページングなどをデータベースで実行する必要があります (つまり、エンティティ フレームワークが適切な SQL クエリを生成する必要があります)。複雑な点の 1 つは、グリッド行を表すビュー モデルが、複数のビジネス エンティティ (テーブル) からのデータを組み合わせて構築されることです。これは、エンティティからデータを単純に取得することも、関連するビジネス エンティティの値に基づいて計算することもできます。このシナリオを処理するには、どのようなアプローチが推奨されますか? ウェブ上の良い例を知っている人はいますか? ほとんどの場合、ビュー モデルとビジネス ドメイン モデル間の単純なマッピングがあります。

28/11 更新 - グリッドとページングの初期表示をさらに明確にするために、パフォーマンスが向上しました。(以下のコメントを参照) 問題は、ユーザーがクリックした列が基になるビジネス テーブルの列に直接マップされない場合に、並べ替え/順序付け (およびフィルター処理) をどのように処理するかです。システムにはそれぞれ多数の列を持つ約 100 のグリッドがあり、列ごとにこれを処理しようとすると維持できないため、これを達成するための一般的な解決策を探しています。

4

1 に答える 1

0

データベースで事前に計算されていない計算フィールドを注文したり、それに対してデータベース操作を実行できるようにしたい場合は、値を事前に計算してデータベースに保存する必要があります。その辺りはとにかくわかりません。

他の唯一の解決策は、ページングや並べ替えなどを Web サーバーに移動することです。すべての値を計算して、それらの順序を見つける必要があるため、実際にはそうしたくないと思います。

したがって、あなたが望むものを達成したい場合は、次のことを行う必要があると思いますが、別の解決策を聞きたいです:

データベース レベルの変更:

  1. ビュー モデルにある計算フィールドごとに、Nullable 列を追加します。

  2. これらの値を計算する SQL スクリプトを記述します。

  3. 必要に応じて列を Not Null に設定します

アプリ レベルの変更:

  1. 追加ページと編集ページでは、これらの値を計算し、残りのデータとともにコミットする必要があります

これらに対してデータベース レベルでクエリを実行し、必要に応じて Queryable を使用できるようになりました。

于 2012-11-28T16:26:05.863 に答える