12

I am trying to use SQL Server named parameters with ObjectContext.ExecuteStoreQuery and ObjectContext.ExecuteStoreCommand when calling a stored procedure or a function directly.

SQL Server named parameters are not the same with the Entity Framework named parameters - they allow me to execute a query similar with this one:

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

The order of the parameters in this query does not matter as opposed with Entity Framework named parameters that are evaluated in order.

I want to use SQL Server named parameters with Entity Framework so that if the order of the parameters is changed in the stored procedure the Entity Framework code calling it is not affected.

4

2 に答える 2

23

これを期待どおりに機能させるには、クエリ テキストをパラメーター化されたクエリとして設定する必要があります。トリッキーな部分は、パラメーターが 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);
于 2012-10-25T18:56:33.997 に答える
6

参考までに、ストアド プロシージャに sp_ で始まる名前を付けないでください。これは、システム ストアド プロシージャの名前の付け方です。その結果、SQL サーバーは、定義を見つける前にすべてのシステム ストアド プロシージャを最初に調べます。多くのストアド プロシージャとそれらの呼び出しを使用すると、本番環境では速度が低下するように見えます。

于 2014-03-20T15:49:53.410 に答える