Поскольку stored procedure звонит из Энтити Фрамеворк 6 code first

Я попробован называть этот stored procedure с C#

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

Код C#

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

5
задан 26.02.2018, 23:10
3 ответа

Ты должен перемещать параметры как объект SqlParameter, это не достаточно со стоимостью. Так:

var lects = pc.Database.SqlQuery<Lectura>(
    "GetLecturasEnRangoDeFechas @fecha, @idParteMaquina, @inicio, @inicioMasDuracion, @dia",
    new SqlParameter("@fecha",fecha),
    new SqlParameter("@idParteMaquina",partemaquina.Id),
    new SqlParameter("@inicio",inicio.TotalSeconds),
    new SqlParameter("@inicioMasDuracion",inicioMasDuracion.TotalSeconds),
    new SqlParameter("@dia",dia));

Entity одинокий Framework имеет доступ к стоимости, не знает, которого переменная fecha должен будь быть распределенным в параметр @fecha.

11
ответ дан 03.12.2019, 23:14

Параметры дебет определять как инстанции SqlParameter

pc.Database.SqlQuery<Lectura>(
    "GetLecturasEnRangoDeFechas @fecha, @idParteMaquina, @inicio, @inicioMasDuracion, @dia",
    new SqlParameter("fecha", fecha),
    new SqlParameter("idParteMaquina", partemaquina.Id),
    new SqlParameter("inicio", inicio.TotalSeconds)
    new SqlParameter("inicioMasDuracion", inicioMasDuracion.TotalSeconds)
    new SqlParameter("dia", dia)
);
5
ответ дан 03.12.2019, 23:14

Вместо того, чтобы использовать SqlQuery () не был бы лучший mapear procedure в организацию используя MapToStoredProcedures

Коде Фирст Инсерт/упдате/делете Сторед Procedures

dee sta форма гораздо проще показывать, что свойства организации mapean с параметрами

В статье он объясняет, как этот тип реализовывать mapping

типов привета

4
ответ дан 03.12.2019, 23:14
  • 1
    +1 Твой ответ элегантнее, но я думаю, что я только нуждаюсь в том, чтобы сделать это однажды, если мне удается потребовать многих Сторед Проседурес, буду считать твою подсказку – The One 11.01.2016, 18:55
  • 2
    @Leandro как ты объявляешь переменную modelBuilder внутри mé все, кто называет store procedure – Pedro Ávila 07.01.2017, 21:49
  • 3
    @PedroÁ vila он не объявляет себе переменную modelbuilder внутри метода, ты должен определять ее в классе, который он получает в наследство от DbContext – Leandro Tuttini 09.01.2017, 11:56

Теги

Похожие вопросы