2012-10-23 21 views
9

ストアドプロシージャまたは関数を直接呼び出すときに、ObjectContext.ExecuteStoreQueryObjectContext.ExecuteStoreCommandという名前のSQL Server名前付きパラメータを使用しようとしています。パラメータの名前ExecuteStoreQueryとExecuteStoreCommandでSQL Server名前付きパラメータを使用する

SQL ServerのEntity Frameworkの名前付きパラメータと同じではありません - 彼らは私がこの1と同様のクエリを実行することができます:

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1 

このクエリ内のパラメータの順序は、として重要ではありません。順序で評価されるEntity Framework名前付きパラメーターとは対照的です。

ストアドプロシージャでパラメータの順序が変更された場合、それを呼び出すEntity Frameworkコードは影響を受けないように、SQL Serverという名前のパラメータをEntity Frameworkで使用します。

答えて

15

これを期待どおりに機能させるには、クエリテキストをパラメータ化されたクエリとして設定する必要があります。トリッキーな部分は、あなたは自分のパラメータが異なっSPパラメータより命名されていることを確認する必要があるということです。

var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param"; 
var @params = new[]{ 
    new SqlParameter("name_param", "Josh"), 
    new SqlParameter("age_param", 45) 
}; 

ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params); 
+0

私はあなたの応答を見つけた後、幸運に感じ、それは魅力的に働いた。 – Signcodeindie

+0

これはより多くの牽引力を必要とします... SPのパラメータの順序に依存せずにSPを呼び出す処理に最適な方法です – mmcrae

4

FYI - それは、システムストアドprocsのは付けの方法だとSP_を開始するには、あなたのストアドプロシージャの名前を指定しないでください。その結果、SQLサーバーは定義を見つける前にすべてのシステムに格納されているprocsを最初に調べ、多くのストアドprocsとそれらの呼び出しで生産が遅くなるように見えます。

関連する問題