Использование параметров 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-сервер будет сначала просматривать все записанные в системе процессы, прежде чем найти ваше определение, и будет казаться более медленным в производстве со многими хранимыми процедурами и вызовами из них.