【问题标题】: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 做到这一点

标签: c# entity-framework entity-framework-6


【解决方案1】:

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

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

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

【讨论】:

  • 你是对的。 sqlParameters.ToArray() 解决了这个问题。非常感谢您帮助我并快速回答。赞赏:)
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多