我正在使用Dapper的DynamicParamters对象和template参数来生成与我的实体的参数。在我调用我的存储过程后,我收到以下错误“过程或函数sp_MemberSave指定了太多参数。”。对于业务逻辑等,我的某些实体上有额外的属性。有没有办法确保dapper只传递作为存储过程的实际参数的参数?似乎Dapper会首先读取存储过程然后设置参数,这样它只会使用正确的参数。如何使用模板功能限制参数?
答案 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
目前信任自定义实现。我想我们可以移动参数分析检查到这一点之后,但我更愿意先了解完整的场景。