【发布时间】: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