EntityFrameworkCore 使用Pomelo.EntityFrameworkCore.MySql 调用具有返回参数的存储过程失败,错误提示 Only ParameterDirection.Input is supported when CommandType is Text (parameter name: @MemberID)
存储过程:
CREATE PROCEDURE `GetMemberID`(
IN uname VARCHAR(128),
OUT MemberID INT
)
BEGIN
SELECT ID INTO MemberID FROM `Member` Where username = uname;
END
调用方式
var usernameParam = new MySqlParameter
{
ParameterName = $"@uname",
DbType = DbType.String,
Direction = ParameterDirection.Input,
Value = "test"
};
var memberIDParam = new MySqlParameter
{
ParameterName = $"@MemberID",
DbType = DbType.Int32,
Direction = ParameterDirection.Output
};
rContext.Database.ExecuteSqlRaw($"Call GetMemberID (@uname=@uname, @MemberID=@MemberID OUT)", usernameParam , memberIDParam);
通过扩展方法来解决此问题:
public static int CallStoredRoutine(this DatabaseFacade databaseFacade,string routineName, params DbParameter[] parameters)
{
int rows;
var cmd = databaseFacade.GetDbConnection().CreateCommand();
cmd.CommandText = routineName;
cmd.Parameters.AddRange(parameters);
cmd.CommandType = CommandType.StoredProcedure;
databaseFacade.OpenConnection();
rows = cmd.ExecuteNonQuery();
databaseFacade.CloseConnection();
return rows;
}