You need to enable JavaScript to run this app. EF Core 5使用FromSqlRaw执行存储过程提示相同键已添加错误
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 5使用FromSqlRaw执行存储过程提示相同键已添加错误

根因分析

这个异常和你返回的行数据内主键值重复没有关系,从堆栈信息可以直接定位到报错发生在EF Core构建结果集列名到实体属性的映射阶段:

  • 报错位置是FromSqlQueryingEnumerable.BuildIndexMap方法,该方法会把存储过程返回的结果集列名作为key存入字典,和你定义的实体属性做映射
  • 提示里的Key: site_no指的是存储过程返回的结果集中存在两个同名的site_no列,存入字典时因为key重复触发异常,完全不是行数据里site_no值重复的问题

这也能解释你之前的尝试都没有生效的原因:不管是配置无键实体、还是配置复合主键,解决的都是行数据主键重复的场景,和列名重复的问题完全不相关,哪怕你改用临时表返回数据,只要查询逻辑里重复输出了site_no字段,就还是会报错。刚好你提到存储过程是两个表的关联查询,大概率是SELECT语句里同时取了两个表的site_no字段且没有指定别名,才会出现重复列名。

排查&解决步骤

  1. 把你传入FromSqlRaw的存储过程调用语句复制到SQL Server Management Studio中直接执行,查看结果集的列名,一定能找到两个名为site_no的列
  2. 修改存储过程的查询逻辑:
    • 删掉不需要的重复列,确保返回的所有列名唯一
    • 如果两个site_no字段都需要保留,给重复的字段加独立别名,比如b.site_no as relate_site_no
  3. 如果你给重复列加了别名,对应在MissingData实体中添加和别名同名的属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 15:54:07