我有一个存储过程,我试图使用Dapper执行,这会引发一个与我尝试做的事情无关的错误,尽管我可以&#39似乎弄清楚我做错了什么。
以下是我试图调用的存储过程的签名:
ALTER PROCEDURE [dbo].[stp_UpdateInboundDaf]
@InboundType varchar(255),
@Id bigint,
@UserId bigint,
@DonationID bigint = NULL,
@StatusId int = NULL,
@FinalFlag bit = NULL,
@ValidatedFlag bit = NULL,
@SignedFlag bit = NULL
AS ...
这是我为尝试调用该程序而编写的代码:
_cnx.Query("stp_UpdateInboundDaf", new
{
InboundType = parameters.InboundType,
Id = parameters.Id,
UserId = parameters.UserId,
DonationId = parameters.DonationId,
StatusId = parameters.StatusId,
FinalFlag = parameters.IsFinal,
ValidatedFlag = parameters.Validated,
SignedFlag = parameters.Signed
}, commandType: CommandType.StoredProcedure);
这些是传递的参数:
这就是我得到的错误:
"使用多映射API时,如果您的ID不是Id,请确保设置splitOn参数 参数名称:splitOn"
更新
从SqlMapper.GetDynamicSerializer(IDataRecord reader, int startBound, int length, bool returnNullIfFirstMissing)
方法引发错误。这是错误位置和堆栈跟踪:
有什么想法吗?
我正在使用当前版本的Dapper(我字面上只是在Github上克隆了repo并在写这个问题之前将SqlMapper.cs拉到我的项目中)。
答案 0 :(得分:10)
我弄清楚我的问题在这里。我的字面意思也是如此。我的存储过程不返回任何值,因此SqlMapper
试图序列化那些不存在的东西。我将代码更改为使用_cnx.Execute(...)
而不是_cnx.Query(...)
,现在一切正常。