11

私はEntity Framework 4.1コードファーストを使用します。私は、出力パラメータを持つストアドプロシージャを呼び出し、強く型付けされた結果セットに加えて、その出力パラメータの値を取得したいと思います。このような署名付き検索機能EF4.1コードファースト:出力パラメータ付きのストアドプロシージャ

public IEnumerable<MyType> Search(int maxRows, out int totalRows, string searchTerm) { ... } 

「関数のインポート」のヒントが多数見つかりましたが、これはコードファーストと互換性がありません。 Database.SqlQuery(...)を使用してストアドプロシージャを呼び出すことはできますが、出力パラメータでは機能しません。

EF4.1コードを使用してこの問題を解決することはできますか?

答えて

26

SqlQueryは出力パラメータで動作しますが、SQLクエリとセットアップを正しく定義してSqlParameterを設定する必要があります。次のように試してみてください:

var outParam = new SqlParameter(); 
outParam.ParameterName = "TotalRows"; 
outParam.SqlDbType = SqlDbType.Int; 
outParam.ParameterDirection = ParameterDirection.Output; 

var data = dbContext.Database.SqlQuery<MyType>("sp_search @SearchTerm, @MaxRows, @TotalRows OUT", 
       new SqlParameter("SearchTerm", searchTerm), 
       new SqlParameter("MaxRows", maxRows), 
       outParam); 
var result = data.ToList(); 
totalRows = (int)outParam.Value; 
+0

パーフェクト!見つからなかった部分は、クエリパラメータリストの "ParameterDirection.Output"と "@totalRows"の後の "OUT"でした。ありがとう! –

+0

複数のOUTPUTパラメータがある場合、これは機能していないようです。それぞれの値はnullです。複数のOUTPUTパラメータを使用してこれを実行する任意の運? –

+0

私のspは何も返しません....だから、その場合にはどうすればいいのですか.... SqlQuery はうまくいきません.... suggesions? –

関連する問題