Dapper "La procédure ou la fonction sp_XXXX contient trop d'arguments spécifiés."

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

Question

J'utilise l'objet DynamicParamters de Dapper avec l'argument template pour générer des arguments avec mes entités. Après avoir appelé ma procédure stockée, j'obtiens l'erreur suivante "La procédure ou la fonction sp_MemberSave contient trop d'arguments spécifiés." J'ai des propriétés supplémentaires sur certaines de mes entités pour la logique métier, etc. Existe-t-il un moyen de s'assurer que dapper ne transmet que les paramètres qui sont des paramètres réels pour la procédure stockée? Il semble que Dapper lirait d'abord la procédure stockée, puis définirait les paramètres, de cette façon, il n'utiliserait que ceux qui sont corrects. Comment puis-je limiter les paramètres en utilisant les fonctionnalités du modèle?

Réponse acceptée

Essayez de créer un type anonyme des paramètres appropriés à partir de votre objet ... Si votre classe a A, B, C et D, et que vous n'avez besoin que de A et B:

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

Réponse d'expert

Puis-je être très clair sur le scénario ici? si vous passez juste l'entité (plutôt que les DynamicParameters ) , il ne fait cette analyse; ie conn.Execute("some sql", someEntity); - il ne faudra alors ajouter que les membres de someEntity dans le SQL. Il peut y avoir des faux positifs, car il n'effectue pas d'analyse SQL lexicale complète, donc un paramètre dans les commentaires, à savoir:

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

sera toujours inclus (donc dans l'exemple ci-dessus, le membre StartDate serait éligible, même si ce n'est probablement pas vraiment nécessaire).

Toutefois; DynamicParameters actuellement l'implémentation personnalisée. Je suppose que nous pourrions déplacer la vérification des paramètres après ce point, mais je préférerais d'abord comprendre le scénario complet.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi