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

EF Core 3.1.9用FromSqlRaw调用存储过程报底层读取器字段不足错误如何解决

故障根因大概率为Windows更新附带的SqlClient驱动版本变动导致的结果集读取逻辑变化

第一步:优先验证存储过程结果集返回逻辑

你可以直接用SSMS使用程序连接字符串的账号登录对应数据库,执行以下语句:

DECLARE @WorkOrderId INT = 38385;
EXEC [dbo].[WorkOrderBOMGridABS] @WorkOrderId;

查看输出面板是否先出现了(N 行受影响)这类计数信息:

  • 若存在该信息,说明你的存储过程未添加SET NOCOUNT ON配置,更新后的SqlClient驱动会把执行过程中返回的行数计数当做第一个结果集读取,该结果集没有任何字段,直接触发字段数少于预期的错误。
  • 解决方法:在存储过程开头第一行添加SET NOCOUNT ON;即可,这是存储过程调用的标准最佳实践,也可以临时将项目引用的Microsoft.Data.SqlClient/System.Data.SqlClient包降级到更新前的版本验证问题是否消失。

第二步:验证无键实体配置

调用存储过程返回的模型大多为无键实体,部分EF Core小版本更新后会对未显式配置的无键实体做校验,要求必须返回主键字段,不存在就会抛出该错误。你可以在DbContext的OnModelCreating方法中添加显式配置:

modelBuilder.Entity<WorkOrderBOMGridABS>(entity =>
{
    entity.HasNoKey(); // 显式声明为无键实体
    // 可根据实际情况添加字段映射,避免列名大小写、别名不匹配的问题
    entity.Property(e => e.你的字段名).HasColumnName("存储过程返回的对应列名");
});

第三步:验证数据库账号权限

如果你的Windows更新同时安装了SQL Server的安全补丁,可能会重置部分账号的存储过程执行权限。用程序连接字符串使用的账号登录SSMS执行存储过程,确认没有权限报错、拦截提示,避免错误信息作为第一个结果集返回触发异常。


内容的提问来源于stack exchange,提问作者Bob Pen Light

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:18:03