我目前正在其中一个项目上使用dapper,我们一直在执行存储过程。在前几个方法中,当我们执行的存储过程返回行时,一切正常。
现在,当我尝试从找到时返回信息的存储过程中获取数据时,我遇到了一个问题。这是一个非常常见的用例(例如,在应用程序上记录用户)。当调用Query
方法并且sproc没有返回任何行时,dapper会抛出ArgumentException
并显示以下消息:
“当使用多映射API时,如果您有除Id参数名称以外的密钥,请确保设置splitOn参数:splitOn”
我正在使用的代码是:
using (var conn = new SqlConnection(connString))
{
conn.Open();
return conn.Query<Customer>(
sql: "prc_GetCustomer",
param: new { Parameter = p },
commandType: CommandType.StoredProcedure).FirstOrDefault();
}
我知道当程序预期不返回任何行时应该使用Execute
方法,但实际上并非我的情况。此外,dapper异常具有误导性,因为我没有使用多映射。
有什么想法吗? 谢谢!
答案 0 :(得分:4)
如果查询未返回任何结果网格,则应使用“执行”,而不是“查询”。