You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core调用SQL Server存储过程返回-1问题求助

问题原因

EF Core Power Tools反向工程生成的存储过程调用方法,默认会返回存储过程的执行影响行数(对应SQL的@@ROWCOUNT),而非你通过SELECT语句返回的计算结果。你的存储过程用SELECT @a+@b输出求和值,但生成的sumAsync方法并未捕获这个查询结果,而是返回了执行语句后的状态值(返回-1本质是方法未正确绑定查询结果)。

解决办法
  • 修改存储过程,用RETURN返回结果
    调整存储过程,通过RETURN返回计算值,这样EF生成的方法会正确映射返回值:

    create procedure sum(@a int, @b int)
    as
    declare @sum int = @a + @b
    return @sum;
    

    修改后重新执行反向工程,调用sumAsync即可得到正确结果。

  • 直接用SqlQuery获取查询结果
    若不想修改存储过程,可绕过生成的方法,直接通过SqlQuery执行存储过程并获取结果:

    var parameters = new[]
    {
        new SqlParameter("@a", 8),
        new SqlParameter("@b", 9)
    };
    var t = await _context.Database.SqlQuery<int>("EXEC sum @a, @b", parameters).FirstAsync();
    Debug.WriteLine("t: " + t);
    
  • 调整反向工程配置
    重新运行EF Core Power Tools反向工程时,在存储过程映射设置中,将该存储过程的返回类型指定为int,并选择生成查询型方法(而非执行型方法),生成的方法会直接返回查询结果。

内容的提问来源于stack exchange,提问作者Programador Desenvolvedor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:22:09