EF6存储过程必须声明标量变量

本文关键字:标量 变量 声明 存储过程 EF6 | 更新日期: 2023-09-27 18:13:05

我正在尝试使用c# EF6调用存储过程来带回数据。我试图在SQL管理工作室运行存储过程,它似乎工作得很好,但是当我试图在我的应用程序中运行它时,我得到一个错误说"Must declare the scalar variable "@devID"

下面是我的部分方法在我的应用程序中调用存储过程
 public IHttpActionResult GetMetrics(int deviceID, string attribute, string startDate)
    {
        if (deviceID == 0)
        {
            return NotFound();
        }
        var metrics = db.Database.SqlQuery<Metrics>("GetMetrics @devID, @MetricType, @startTime", deviceID, attribute, startDate).ToList();

,这是我的存储过程:

    ALTER PROCEDURE [dbo].[GetMetrics]
    -- Add the parameters for the stored procedure here
    @devID int,
    @MetricType nvarchar(20),
    @startTime nvarchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for procedure here
    SELECT * 
    FROM dbMetrics
    WHERE deviceID = @devID and MetricType = @MetricType and timeStamp >= @startTime
    ORDER BY timeStamp 
END

EF6存储过程必须声明标量变量

根据文档,如果您想使用命名参数,则需要像这样传递SqlParameter对象:

var metrics = db.Database.SqlQuery<Metrics>("GetMetrics @devID, @MetricType, @startTime", 
    new SqlParameter("devID", deviceID),
    new SqlParameter("MetricType", attribute),
    new SqlParameter("startTime", startDate)
).ToList();