這是我第一次嘗試使用 EF 呼叫傳入引數的 SQL Server 存盤程序。這是我正在測驗的更新存盤程序,我不斷收到錯誤
程序或函式“Employee_Update”需要未提供的引數“@EmployeeId”
如果我在呼叫存盤程序的代碼中放置一個斷點,我可以看到引數并且它們被正確填充。我還在存盤程序和我的代碼之間復制并粘貼了引數名稱,以確保我沒有拼錯某些內容。
我在代碼中閱讀和看到的所有內容都表明它應該可以作業。我還通過直接從 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)
)

uj5u.com熱心網友回復:
即使您使用有序引數創建了存盤程序,EF 的 ExecuteSQLRaw() 函式似乎也要求您通過 SQL 引數化在您提供給函式的查詢字串中傳遞引數。
還要確保您的引數與 SQLParameter[] 陣列的順序相同。
嘗試將您的執行行修改為:
db.Database.ExecuteSqlRaw("EXEC dbo.Employee_Update @EmployeeId, @FirstName, @LastName, @MiddleInitial", sqlParms.ToArray());
引數排序 Entity Framework Core 根據 SqlParameter[] 陣列的順序傳遞引數。傳遞多個 SqlParameters 時,SQL 字串中的順序必須與存盤程序定義中的引數順序相匹配。不這樣做可能會在執行程序時導致型別轉換例外和/或意外行為。
有關更多資訊,請參閱以下鏈接:https ://docs.microsoft.com/en-us/ef/core/querying/raw-sql
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450022.html
