私は、Entity Framework 4.0経由でSQL Server 2008データベースとやり取りするASP.NET MVC Webアプリケーションを用意しています。ストアドプロシージャのパラメータを最小化するためのアドバイス
特定のページでは、UIの選択に基づいていくつかの結果を取り戻すためにストアドプロシージャを呼び出します。
次に、UIは、それらの入力の各々は、論理セクションに「グループ化」されている等のテキストボックス、ドロップダウンリスト、チェックボックス、
の範囲、約20の異なる入力選択を有します。
例:
- 検索ボックス: "フー"
- チェックボックスA1:チェックを入れ、チェックボックスA2:チェックを外す
- ドロップダウンA:チェックを入れ、チェックボックスB2:
- チェックボックスB1を選択オプション3:チェックさ、チェックボックスB3:だから私はこのようなSPROCを呼び出す必要が
をチェックを外す:
exec SearchPage_FindResults @SearchQuery = 'Foo', @IncludeA1 = 1, @IncludeA2 = 0, @DropDownSelection = 3, @IncludeB1 = 1, @IncludeB2 = 1, @IncludeB3 = 0
UIはこの質問にとってあまり重要ではありません。ちょっとした見解を伝えたいだけです。
本質的に、私は検索クエリの結果を取り戻し、ユーザーがフィルタリングできる一連の(オプションの)選択に基づいてこれらの結果をフィルタリングします。
今、私の質問/クエリ:
- ストアドプロシージャにこれらのパラメータを渡すための最良の方法は何ですか?
- これを行うには何か/新しい方法(SQL Server 2008など)はありますか?特殊な "テーブル"パラメータ/配列 - ユーザー定義型を渡すことはできますか? Entity Framework 4.0を使用していることを念頭に置いてください。しかし、必要に応じて、これにはいつもクラシックADO.NETを使用できます。
- XMLについてはどうですか?ここでのシリアライゼーション/デシリアライゼーションコストとは何ですか?その価値はありますか?
- 各論理セクションのパラメータはどうですか?カンマ区切り?ただ大声で考えている。
このページは、ユーザーの視点から見ると特に重要であり、本当にうまく動作する必要があります。ストアドプロシージャはすでにロジックが重いので、パフォーマンスの影響を最小限に抑えたいので、それを覚えておいてください。
これで、ここで最善のアプローチは何ですか?
驚くばかり - 私はTVPアプローチに行きます。ありがとうございます、+1して受け入れる! – RPM1984