Ajout d'un paramètre de sortie dynamique Dapper dans VB.NET

.net-4.0 dapper parameters vb.net

Question

J'essaie d'utiliser Dapper pour appeler une procédure stockée avec deux paramètres de sortie, en utilisant VB.NET (et .NET 4.0).

Toutefois, il semble que je ne puisse pas utiliser la méthode DynamicParameters.Add , car j'obtiens l'erreur de compilation suivante:

"Ajouter" est ambigu car plusieurs types de membres portant ce nom existent dans la classe "Dapper.DynamicParameters".

... quand j'essaie d'écrire la ligne suivante:

p.Add("@NewRecordID", DbType:=DbType.Int32, direction:=ParameterDirection.Output)

Une recherche rapide m'indique que cela se produit parfois lors de l'utilisation d'une bibliothèque C # comportant plusieurs méthodes qui ne diffèrent que par leur nom (VB.NET étant insensible à la casse). La recherche du code source Dapper pour DynamicParameters montre les deux surcharges suivantes pour la méthode Add , mais elles utilisent toutes les deux le même cas et le compilateur doit être capable de discerner les deux.

public void Add(string name, object value, DbType? dbType, ParameterDirection? direction, int? size)

public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null, byte? precision = null, byte? scale = null)

(J'ai aussi essayé d'ajouter une scale:=Nothing à l'appel pour forcer la deuxième surcharge, en vain.)

Bien que je puisse contourner ce problème avec les paramètres d'entrée en transmettant un objet anonyme au constructeur DynamicParameters , je ne trouve pas le moyen de contourner ce problème lors de l'ajout des paramètres de sortie.

J'ai vérifié les références du projet pour vérifier qu'il n'y a pas de références d'assemblage multiples ou ambiguës.

Quelqu'un at-il déjà rencontré ce problème et trouvé une solution de contournement?

Pour le moment, la seule option à laquelle je peux penser est de réécrire l'appel de procédure stockée sans utiliser Dapper, comme cela est implicite ici .

Réponse populaire

De ce que je peux rassembler, voici toutes les solutions possibles:

  1. Réécrivez la procédure stockée pour ne pas utiliser les paramètres de sortie. (L'option que j'ai pu utiliser dans ce cas.)
  2. Réécrivez le code appelant la procédure stockée pour utiliser ADO.NET standard.
  3. Réécrire Dapper pour utiliser un modèle de surcharge différent pour DynamicParameters.Add .
  4. Mettez à jour le projet pour utiliser .NET 4.5.
  5. Réimplémenter IDynamicParameter (s) ou éventuellement sous-classe DynamicParameters



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