Entity Framework SQL 未提供参数

Entity Framework SQL Parameters not getting supplied

thread 提供了多种向存储过程提供参数的方法。

None 他们为我工作。

这个有效:

this.PayrollContext.Database.SqlQuery<CSRRateEntity>("ord_getCSRRate @csr_num = '4745', @ord_pay_period_id = 784").ToList();

这不是:

return this.PayrollContext.Database.SqlQuery<CSRRateEntity>("Exec ord_getCSRRate @csr_num, @ord_pay_period_id",
            new SqlParameter("csr_num", "4745"),
            new SqlParameter("ord_pay_period_id", 784)
            ).ToList();

错误消息是未提供参数。

已经尝试了所有我能想到的变体,但仍然收到相同的错误消息。

这是使用 Code First,因此不需要导入。 SP找到了,只是缺少参数。

你把存储过程导入到edmx了吗?

在我们为存储过程创建的实现中,它创建如下参数:

    var inputIdParameter = inputId.HasValue ?
        new ObjectParameter("InputId", inputId) :
        new ObjectParameter("InputId", typeof(int));

存储过程函数的结果是这样给出的

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<T>("[SP_NAME]",  inputIdParameter);

解决方案原来是更改存储过程中参数的顺序,以便可选参数位于必需参数之后(就像在 c# 中一样)。

作品:

ALTER procedure [dbo].[ord_GetCSRRate]@ord_pay_period_id int,@csr_num varchar(10) = null, @csr_id int = null, @update_csr_pay_flag bit = 0

无效:

ALTER procedure [dbo].[ord_GetCSRRate]@csr_num varchar(10) = null, @ord_pay_period_id int, @csr_id int = null, @update_csr_pay_flag bit = 0, @recursion_flag bit = 0