0

私は、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についてはどうですか?ここでのシリアライゼーション/デシリアライゼーションコストとは何ですか?その価値はありますか?
  • 各論理セクションのパラメータはどうですか?カンマ区切り?ただ大声で考えている。

このページは、ユーザーの視点から見ると特に重要であり、本当にうまく動作する必要があります。ストアドプロシージャはすでにロジックが重いので、パフォーマンスの影響を最小限に抑えたいので、それを覚えておいてください。

これで、ここで最善のアプローチは何ですか?

答えて

3

すばやいグーグルでは、Entity Frameworkはそれらをサポートしていないようですが、ADOで[テーブルの値付きのパラメータ]を使用できます。

ご自分のサーバでテーブルタイプを定義することであることを管理:

SqlParameter param = command.CreateParameter(); 
param.ParameterName = "@something" 
param.SqlDbType = SqlDbType.Structured 
param.Value = // a DataTable which matches your table type, I can stick in code I use if you like 
param.TypeName = "table type name"; 

そして、あなたの手順は次のようになります。その後、

CREATE TYPE yourTypeName AS TABLE (
    columnName <column type> 
    -- more columns if you wish, too 
) 

とSqlCommandオブジェクトを作成し、これを行うことによって、それを使用します:

CREATE PROCEDURE procName 
@something yourTypeName READONLY 
AS 
BEGIN 
... 

SQLクエリは、そのパラメータをテーブルのように使用しますが、読み取り専用です。

私はDBAではありませんし、XMLの速さもわかりません。かなり簡単です。かなり驚異的に高速ですが、私が使用した比較的簡単なDataTableメソッドですら優れています。 TVPの詳細については、hereと、一般的なSQLとTVPに関するブログ記事があります。

+0

驚くばかり - 私はTVPアプローチに行きます。ありがとうございます、+1して受け入れる! – RPM1984

関連する問題