1

MVC3 アプリケーションに検索機能を実装しようとしています。2 つのパラメーターを渡して、基本的に次のようなストアド プロシージャを実行しようとしています。

create procedure MyProc
(
@FirstParam nvarchar(50),
@SecondParam nvarchar(20)
)
as select * from MyTable where @FirstParam like @SecondParam
  • MyTable には、オブジェクトごとに返される約 30 のフィールドがあり、いくつかのテーブルに対してこのような手順を作成する必要があるため、SqlDataReader を使用して返された Sql データを C# に変換することを避けようとしています。
  • このメソッドのようなものを使用したいのですが、これが複数のパラメーターで実行できるかどうかはわかりません。
  • 理想的には EF4 を使用したいのですが、EF4 の使用中にストアド プロシージャを実行することに関する適切な情報が見つかりませんでした。

このタスクを実行するための最も簡単な方法および/またはベストプラクティスに関する洞察は大歓迎です。

4

2 に答える 2

1

私の提案は、動的 linqを使用することです(およびhereおよびhere )。有効な linq 式を通常の文字列として渡すことができます。

var column = "Name";
var value = "Marvin";
var query = DbCtx.MyEntity.Where("{0} == @1", columnName, value);

利点 (IMO) は、検索ロジックをアプリケーションに保持できることです。多くのテーブルに対してこれを行う必要がある場合は、T4 テンプレートを作成してブートストラップ コードを生成できます。

于 2012-08-29T19:50:33.303 に答える
1

あなたが提案していること実際にパラメーターを介して行うことができ、データアクセスにはEF4のようなORMを使用する必要があります。ストアド プロシージャをサポートするほとんどの ORM と同様に、複数のパラメータをストアド プロシージャに渡すことができます。

ただし、問題は、SQL Server (または私が認識している他の SQL データベース) で動的な列名を使用できないことです。変数に列名を指定することはできません。

これを実現するには、ストアド プロシージャ内またはその他の方法で、動的 SQLを使用する必要があります。

于 2012-08-29T19:24:20.263 に答える