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

如何将存储过程返回的单结果集绑定到单个自定义类对象?

错误原因

SqlQuery<T> 方法的入参要求是 params SqlParameter[] 可变参数数组,你当前传入的 sqlParameters 是 List<SqlParameter> 类型,EF 会将整个列表识别为单个 SQL 参数,找不到对应的数据类型映射,因此抛出该异常。

解决步骤
  1. 将 List<SqlParameter> 转为参数数组传入,同时调整存储过程调用的SQL语句为标准EXEC格式:
// 参数定义示例,可按你的实际参数调整
List<SqlParameter> sqlParameters = new List<SqlParameter>
{
    new SqlParameter("@UserId", SqlDbType.Int) { Value = 1001 },
    new SqlParameter("@DataType", SqlDbType.NVarChar, 20) { Value = "BASE" }
};

// 调用时用ToArray()转数组,SQL写完整的EXEC存储过程语句
var data = ctx.Database
              .SqlQuery<SPResultSet>("EXEC [dbo].[GET_Data] @UserId, @DataType", sqlParameters.ToArray())
              .FirstOrDefault();
  1. 映射校验:
    保证 SPResultSet 类的属性名和存储过程返回的列名完全匹配,比如你当前的存储过程返回了Address列,需要在类中补充public string Address { get; set; }定义。多余的附加属性不会影响映射,返回结果中不存在的列会自动赋值为对应类型的默认值。
    因为你已经确认存储过程仅返回单行数据,调用 FirstOrDefault() 就可以直接得到绑定完成的单个 SPResultSet 对象。

内容的提问来源于stack exchange,提问作者I Love Stackoverflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:04