【问题标题】:blazor with MySql EntityFrameworkCore return output parameter get error带有 MySql EntityFrameworkCore 的 blazor 返回输出参数获取错误
【发布时间】:2020-09-01 16:39:55
【问题描述】:

我正在将 MySql.Data.EntityFrameworkCore 与 blazor 一起使用,当我想从存储过程中获取分页的输出值总计数时,我得到以下错误

错误:MySql.Data.MySqlClient.MySqlException (0x80004005): OUT 或 例程 get_articles 的 INOUT 参数 1 不是变量或 NEW BEFORE 触发器中的伪变量

下面的代码是我的存储过程

DELIMITER $$
CREATE PROCEDURE get_articles(IN _offset INT, IN _count INT, OUT _total INT)
BEGIN
SELECT SQL_CALC_FOUND_ROWS * 
FROM content c JOIN content_types t 
ON c.content_type = t.id
WHERE t.name = 'article' 
LIMIT _offset, _count;
SET _total = FOUND_ROWS();
END$$
DELIMITER ;

下面的代码是c#

var totalCount = new MySqlParameter()
{
ParameterName = "@TotalCount",
Direction = System.Data.ParameterDirection.Output, 
};

var earningTypes1 = await dbContext.Result.FromSqlRaw(
"CALL get_articles (0,30,@TotalCount)",
totalCount
).AsNoTracking().ToListAsync();

【问题讨论】:

    标签: c# mysql asp.net-core blazor blazor-server-side


    【解决方案1】:

    使用CommandType.StoredProcedure 而不是显式CALL 存储过程:

    using (var command = new MySqlCommand("get_articles", dbConnection))
    {
        command.CommandType = CommandType.StoredProcedure;
        var totalCount = new MySqlParameter()
        {
            ParameterName = "@TotalCount",
            Direction = ParameterDirection.Output, 
        };
        command.Parameters.Add(totalCount);
    
        using (var reader = await command.ExecuteReaderAsync())
        {
            // build list from results
        }
    
        // use totalCount.Value...
    }
    

    请注意,如果您使用异步 DB 操作,则需要确保使用 MySqlConnector 作为 ADO.NET 库,使用 Pomelo.EntityFrameworkCore.MySql 作为 EF.Core,因为它们是唯一的 MySQL支持异步 I/O 的库。

    【讨论】:

    • 有什么方法可以使用 MySql EntityFrameworkCore 对存储过程进行分页
    【解决方案2】:

    由于部分版本的Mysql连接器不支持out parameters,通常的解决方法是通过MySQL user variables获取返回值,然后使用查询语句获取变量值。

    更多详情,请参考this

    请确认你当前的Mysql连接器版本是否支持out参数,可以参考it

    【讨论】:

    • 有什么方法可以使用 MySql EntityFrameworkCore 对存储过程进行分页
    猜你喜欢
    • 2020-07-25
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多