如何将存储过程返回的单结果集绑定到单个自定义类对象?
错误原因
SqlQuery<T> 方法的入参要求是 params SqlParameter[] 可变参数数组,你当前传入的 sqlParameters 是 List<SqlParameter> 类型,EF 会将整个列表识别为单个 SQL 参数,找不到对应的数据类型映射,因此抛出该异常。
解决步骤
- 将
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();
- 映射校验:
保证SPResultSet类的属性名和存储过程返回的列名完全匹配,比如你当前的存储过程返回了Address列,需要在类中补充public string Address { get; set; }定义。多余的附加属性不会影响映射,返回结果中不存在的列会自动赋值为对应类型的默认值。
因为你已经确认存储过程仅返回单行数据,调用FirstOrDefault()就可以直接得到绑定完成的单个SPResultSet对象。
内容的提问来源于stack exchange,提问作者I Love Stackoverflow
相关产品推荐
相关产品推荐

