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
相关产品推荐
相关产品推荐

