Я пытаюсь вызвать эту хранимую процедуру из С#
alter PROCEDURE GetLecturasEnRangoDeFechas
-- Add the parameters for the stored procedure here
@fecha as smalldatetime,
@idParteMaquina int,
@inicio int,
@inicioMasDuracion int,
@dia smalldatetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @inicioFecha as smalldatetime
set @inicioFecha=CONVERT(smalldatetime, DATEADD(s,@inicio,0))
declare @inicioMasDuracionFecha as smalldatetime
set @inicioMasDuracionFecha=CONVERT(smalldatetime, DATEADD(s,@inicioMasDuracion,0))
-- Insert statements for procedure here
select * from Lectura
where
cast(Fecha as Date) =cast(@fecha As Date) and
IdParteMaquina=@idParteMaquina and
(Fecha>=@inicioFecha and
Fecha<=@inicioMasDuracionFecha)
or
(@inicioMasDuracionFecha>@dia and
(@inicioFecha+Fecha<=@inicioMasDuracionFecha))
END
GO
код С#
using(ProduccionContexto pc=new ProduccionContexto())
{
var lects=pc.Database.SqlQuery<Lectura>("GetLecturasEnRangoDeFechas",fecha,partemaquina.Id, inicio.TotalSeconds, inicioMasDuracion.TotalSeconds, dia);
}
Это бросает меня:
Procedure or function 'GetLecturasEnRangoDeFechas' expects parameter '@fecha', which was not supplied.
А если я сделаю так:
using(ProduccionContexto pc=new ProduccionContexto())
{
var lects=pc.Database.SqlQuery<Lectura>("GetLecturasEnRangoDeFechas @fecha,@idParteMaquina,@inicio,@inicioMasDuracion,@dia",fecha,partemaquina.Id, inicio.TotalSeconds, inicioMasDuracion.TotalSeconds, dia);
}
Брось мне:
Must declare the scalar variable "@fecha".
Каков правильный синтаксис для вызова SP из C# EF 6 CodeFirst
Вы должны передать параметры как объект
SqlParameter
, этого недостаточно со значениями. Так:Entity Framework имеет доступ только к значению, он не знает, что переменная
fecha
должна быть присвоена параметру@fecha
.Вместо использования SqlQuery() было бы лучше сопоставить процедуру с сущностью, используя MapToStoredProcedures
Сначала код вставьте/обновите/удалите хранимые процедуры
В этой форме намного проще указать, какие свойства карты сущности с параметрами
В статье объясняется, как выполнить этот тип сопоставления
Ваше здоровье
Параметры должны быть указаны как экземпляры
SqlParameter
Я применяю этот способ для реализации SP с использованием EF:
Я объявляю экземпляр своих сущностей, то есть свое подключение к базе данных.
Затем я объявляю переменную, которая будет содержать SP: « DeleteEmployee », за которой следуют сущности + имя SP, а затем параметр, необходимый для его выполнения.
Последний, но тем не менее важный. Объекты вызываются, и изменения сохраняются с помощью SavesChanges();
Таким образом, это работает для меня.
Я надеюсь, что этот ответ будет полезен для будущих посещений заданного вопроса.