Dapper execute存储过程引发关于多映射的ArgumentException

时间:2012-01-20 16:56:14

标签: dapper

我有一个存储过程,我试图使用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);

这些是传递的参数:

enter image description here

这就是我得到的错误:

"使用多映射API时,如果您的ID不是Id,请确保设置splitOn参数 参数名称:splitOn"

更新

SqlMapper.GetDynamicSerializer(IDataRecord reader, int startBound, int length, bool returnNullIfFirstMissing)方法引发错误。这是错误位置和堆栈跟踪:

enter image description here

有什么想法吗?

我正在使用当前版本的Dapper(我字面上只是在Github上克隆了repo并在写这个问题之前将SqlMapper.cs拉到我的项目中)。

1 个答案:

答案 0 :(得分:10)

我弄清楚我的问题在这里。我的字面意思也是如此。我的存储过程不返回任何值,因此SqlMapper试图序列化那些不存在的东西。我将代码更改为使用_cnx.Execute(...)而不是_cnx.Query(...),现在一切正常。