Dapper“过程或函数sp_XXXX指定了太多参数。”

时间:2013-06-18 01:21:52

标签: c# asp.net-mvc-3 dapper micro-orm

我正在使用Dapper的DynamicParamters对象和template参数来生成与我的实体的参数。在我调用我的存储过程后,我收到以下错误“过程或函数sp_MemberSave指定了太多参数。”。对于业务逻辑等,我的某些实体上有额外的属性。有没有办法确保dapper只传递作为存储过程的实际参数的参数?似乎Dapper会首先读取存储过程然后设置参数,这样它只会使用正确的参数。如何使用模板功能限制参数?

2 个答案:

答案 0 :(得分:3)

尝试从对象中创建适当参数的匿名类型...如果您的班级有A,B,C和D,并且您只需要A和B:

DynamicParameters(new { A = entity.A, B = entity.B });

答案 1 :(得分:1)

我能否清楚这个场景?如果您只是传递实体(而不是DynamicParameters),那么进行此分析;即conn.Execute("some sql", someEntity); - 它只会添加它可以看到的someEntity成员在SQL中使用。可能有一些误报,因为它不执行完整的词法SQL分析,因此注释中的参数,即:

-- removed by Fred: where row.Date < @StartDate

仍将包含在内(因此在上面的示例中,成员StartDate符合条件,即使它可能

然而; DynamicParameters目前信任自定义实现。我想我们可以移动参数分析检查到这一点之后,但我更愿意先了解完整的场景。