Я работаю с Entity Framework в C#, и у меня есть проблема, которую я отследил до сгенерированного оператора SQL.sp_executesql - Процедура или функция ожидает параметр, который не был отправлен
Хранимая процедура принимает параметр таблицы, но это, похоже, не является проблемой.
В SQL Profiler, я вижу следующее выполняется:
declare @p3 dbo.PositiveTypes
insert into @p3 values(N'1')
insert into @p3 values(N'4')
insert into @p3 values(N'6')
exec sp_executesql N'dbo.SaveResults',
N'@resultID int, @positiveResults [PositiveTypes] READONLY',
@resultID=1,
@[email protected]
Это приводит к:
Msg 201, уровень 16, состояние 4, Процедура SaveResults, линия 0
процедуры или функция «SaveResults» ожидает параметр «@resultID», который не был указан.
Определение этой процедуры:
ALTER PROCEDURE [dbo].[SaveResults]
@resultID int,
@positiveResults AS dbo.PositiveTypes READONLY
Пользователь определен тип:
CREATE TYPE [dbo].[PositiveTypes] AS TABLE(
[TypeID] [tinyint] NULL
)
Что с этим sp_executesql
синтаксиса? Почему он думает, что @resultID
здесь неправильно передается?
Как вы это делаете?Невозможно ли установить тип команды, чтобы EF знал, что это хранимая процедура? –
Он выполняется в EF, используя Database.ExecuteSqlCommand в DbContext. Кажется, он распознает его как хранимую процедуру на основе сообщения об ошибке с SQL Server («процедура или функция» ... ожидает «параметр»). Я пытаюсь точно определить, что не так с синтаксисом sp_executesql, а затем работать обратно, чтобы переработать код по мере необходимости. – Patrick
А, ОК. Я думал, что может быть некоторый эквивалент типа команды [но, похоже, не так) (http://msdn.microsoft.com/en-us/library/system.data.entity.database_methods (v = vs.113) .aspx) –