Dapper 执行存储过程引发关于多映射的 ArgumentException
Posted
技术标签:
【中文标题】Dapper 执行存储过程引发关于多映射的 ArgumentException【英文标题】:Dapper execute stored procedure raises ArgumentException about multi-mapping 【发布时间】:2012-01-20 16:56:13 【问题描述】:我有一个存储过程,我正在尝试使用 Dapper 执行它引发的错误似乎与我正在尝试做的事情无关,尽管我似乎无法弄清楚我在做什么我做错了。
这是我试图调用的存储过程的签名:
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 以外的键,请确保设置 splitOn 参数 参数名称:splitOn"
更新
SqlMapper.GetDynamicSerializer(IDataRecord reader, int startBound, int length, bool returnNullIfFirstMissing)
方法引发了错误。这是错误位置和堆栈跟踪:
有什么想法吗?
我正在使用当前版本的 Dapper(我字面意思只是在写这个问题之前克隆了 Github 上的 repo 并将 SqlMapper.cs 拉到我的项目中)。
【问题讨论】:
调试器说什么?您有来源,应该清楚错误发生在哪里。在最后一个可跟踪的堆栈位置周围提供堆栈跟踪和相关代码。 是的,对不起...我应该把它包括在内。我将使用引发错误的位置更新帖子。 禁用优化,我怀疑异常发生在上一行。 呃...我知道我的问题是什么。已更新。 很高兴您找到了解决方案 :) 自己想办法总是更好。反正+1 【参考方案1】:我知道我的问题出在哪里。我太从字面上遵循这些例子了。我的存储过程不返回任何值,所以SqlMapper
试图序列化不存在的东西。我将代码更改为使用_cnx.Execute(...)
而不是_cnx.Query(...)
,现在一切正常。
【讨论】:
以上是关于Dapper 执行存储过程引发关于多映射的 ArgumentException的主要内容,如果未能解决你的问题,请参考以下文章