Использование параметров SQL Server с параметрами ExecuteStoreQuery и ExecuteStoreCommand

Я пытаюсь использовать параметры SQL Server с параметрами ObjectContext.ExecuteStoreQuery и ObjectContext.ExecuteStoreCommand при непосредственном вызове хранимой процедуры или функции.

Именованные параметры SQL Server не совпадают с параметрами Entity Framework с именами параметров - они позволяют мне выполнить запрос, похожий на этот:

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

Порядок параметров в этом запросе не имеет значения в отличие от Entity Framework с параметрами, которые оцениваются по порядку.

Я хочу использовать именованные параметры SQL Server с Entity Framework, чтобы при изменении порядка параметров в хранимой процедуре код Entity Framework, вызывающий его, не затрагивался.

Ответ 1

Чтобы заставить это работать так, как вы ожидали, вам нужно настроить текст запроса как параметризованный запрос. Трудная часть состоит в том, что вам просто нужно убедиться, что ваши параметры названы иначе, чем параметры 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);

Ответ 2

FYI - не называйте свои хранимые процедуры, чтобы начать с sp_, как то, как названы системные хранимые procs. Результатом является то, что SQL-сервер будет сначала просматривать все записанные в системе процессы, прежде чем найти ваше определение, и будет казаться более медленным в производстве со многими хранимыми процедурами и вызовами из них.