4

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

4

2 回答 2

3

尝试从您的对象创建一个适当参数的匿名类型...如果您的类有 A、B、C 和 D,而您只需要 A 和 B:

DynamicParameters(new { A = entity.A, B = entity.B });
于 2013-06-18T01:41:29.787 回答
1

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

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

仍将包括在内(因此在上面的示例中,该成员StartDate将符合条件,即使它可能实际上并不需要)。

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

于 2013-06-18T07:09:09.090 回答