Dapper "プロシージャまたは関数sp_XXXXの引数が多すぎます。"

asp.net-mvc-3 c# dapper micro-orm

質問

DapperのDynamicParamtersオブジェクトをテンプレート引数とともに使用して、エンティティで引数を生成しています。ストアドプロシージャを呼び出すと、次のエラーが発生します。 "プロシージャまたは関数sp_MemberSaveの引数が多すぎます。"私は、ビジネスロジックなどのために私のエンティティのいくつかに追加のプロパティを持っています。ダッパーがストアドプロシージャの実際のパラメータであるパラメータだけを渡すようにする方法はありますか? Dapperがまずストアドプロシージャを読み込んでから、パラメータを設定するようにして、正しいものだけを使うように思えます。テンプレート機能を使用してパラメータを制限するにはどうすればよいですか?

受け入れられた回答

オブジェクトから適切なパラメータの匿名型を作成してみてください...クラスにA、B、C、Dがあり、AとBだけが必要な場合:

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

エキスパート回答

ここのシナリオで私は非常に明確になりますか? DynamicParametersではなくエンティティを渡すだけで、この分析行われます。すなわちconn.Execute("some sql", someEntity);次に、SQLで使用されていることがわかるsomeEntityのメンバーだけを追加します。完全なレキシカルSQL分析を実行しないので、 いくつかの誤認がある可能性があります。したがって、コメントのパラメータ、つまり:

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

(上記の例では、 実際には必要ではないにしても、 StartDateのメンバーはStartDateになります)。

しかしながら; DynamicParameters現在カスタム実装を信頼しています。この時点でパラメータ分析のチェックを行うことができると思いますが、最初に完全なシナリオを理解することをお勧めします。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow