Entity Framework .Net 6 with SQL 服务器存储过程——未提供参数

Entity Framework .Net 6 with SQL Server stored procedure – parameter not supplied

这是我第一次尝试使用 EF 调用传入参数的 SQL 服务器存储过程。这是我正在测试的更新存储过程,但我一直收到错误

Procedure or function 'Employee_Update' expects parameter '@EmployeeId', which was not supplied

如果我在调用存储过程的代码中放置一个断点,我可以看到参数并且它们已正确填充。我还在存储过程和我的代码之间复制并粘贴了参数名称,以确保我没有拼错某些东西。

我在代码中阅读和看到的所有内容都表明它应该可以工作。我还通过直接从 SQL Server Management Studio 执行存储过程来确认存储过程代码是好的,它工作得很好。

任何人对我可以尝试什么或看到看起来行不通的东西有什么建议吗?

List<SqlParameter> sqlParms = new List<SqlParameter>
    {
        new SqlParameter { ParameterName = "@EmployeeId", Value = employee.EmployeeID },
        new SqlParameter { ParameterName = "@FirstName ", Value = employee.FirstName },
        new SqlParameter { ParameterName = "@LastName", Value = employee.LastName},
        new SqlParameter { ParameterName = "@MiddleInitial", Value = employee.MiddleName }
    };
db.Database.ExecuteSqlRaw("EXEC dbo.Employee_Update", sqlParms.ToArray());

更新

存储过程参数

ALTER PROCEDURE [dbo].[Employee_Update]
(
    @EmployeeId varchar(8),
    @FirstName varchar(40),
    @LastName varchar(40),
    @MiddleInitial char(1)
)

即使您使用有序参数创建存储过程,EF 的 ExecuteSQLRaw() 函数似乎也要求您通过您提供的查询字符串中的 SQL 参数化来传递参数到函数。

还要确保您的参数与 SQLParameter[] 数组的顺序相同。

尝试将您的执行行修改为:

db.Database.ExecuteSqlRaw("EXEC dbo.Employee_Update @EmployeeId, @FirstName, @LastName, @MiddleInitial", sqlParms.ToArray());

Parameter Ordering Entity Framework Core passes parameters based on the order of the SqlParameter[] array. When passing multiple SqlParameters, the ordering in the SQL string must match the order of the parameters in the stored procedure's definition. Failure to do this may result in type conversion exceptions and/or unexpected behavior when the procedure is executed.

有关详细信息,请参阅以下内容link:https://docs.microsoft.com/en-us/ef/core/querying/raw-sql