如何将存储过程单个结果集与单个类对象结果绑定?

Posted

技术标签:

【中文标题】如何将存储过程单个结果集与单个类对象结果绑定?【英文标题】:How do I bind stored procedure single result set with single class object result? 【发布时间】:2021-12-01 08:45:40 【问题描述】:

我有一个返回以下结果集的存储过程:

Id : int
Name : string
Image : string
Address : string

代码:

public class SPResultSet

       public int Id  get; set; 
       public string Name  get; set; 
       public string Image  get; set; 
       //other additional properties
 

var data = ctx.Database
              .SqlQuery<SPResultSet>("[dbo].[GET_Data] params", sqlParameters)
              .FirstOrDefault();

错误:

System.ArgumentException: '不存在来自对象类型 System.Collections.Generic.List`1[[System.Data.SqlClient.SqlParameter, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 的映射]] 到已知的托管提供程序本机类型。'

如何将存储过程的单个结果集与单个类对象结果绑定?

注意:存储过程只返回1行数据。

【问题讨论】:

你能说明你传递了什么参数吗? error is sqlParameters, 好像类型不对,试试把sqlParameters转成数组 @Nonik 是的,sqlParameters.ToArray() 解决了这个问题。感谢您的帮助:) 顺便说一句,除非您始终以正确的顺序传递参数,否则您应该始终使用以下语法[dbo].[GET_Data] @param1 = @param1, @param2 = @param2...。理想情况下,您希望更改命令类型,而不是临时批处理,而是直接调用过程,因此您需要CommandType.StoredProcedure,然后查询字符串就是[dbo].[GET_Data]。但我不确定你是否可以用 EF 做到这一点 【参考方案1】:

你不应该将参数作为列表传递,你应该将每个参数传递给存储过程。

或者在你的情况下它可以被传递为sqlParameters.ToArray()

注意:如果您提供完整的代码以及您要传递的参数和存储过程,那就太好了。

【讨论】:

你是对的。 sqlParameters.ToArray() 解决了这个问题。非常感谢您帮助我并快速回答。赞赏:)

以上是关于如何将存储过程单个结果集与单个类对象结果绑定?的主要内容,如果未能解决你的问题,请参考以下文章

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中

使用 .net core 将存储过程的结果与返回对象映射

使用 #eval() 将来自单个数据集的多个表中的数据绑定到转发器

SQL存储过程多个结果到临时表中

如何将函数的所有结果存储到Lua中的单个变量中?