Procédures stockées Dapper QueryMultiple sans mappage vers des objets

dapper dapper-extensions tsql

Question

Avec dapper, je peux effectuer une exécution par lots pour les procédures stockées, à l'instar de:

connection.Execute(@"
  exec sp1 @i = @one, @y = @two 
  exec sp2 @i = @three",
  new { one = 1, two = 2, three = 3 });

Cependant, le seul moyen de récupérer les données que j'ai vues jusqu'à présent est d'utiliser

results.Read<Type>()

Que se passe-t-il si les résultats ne correspondent pas à un objet? Par exemple, j'écris du code "générique" pour exécuter tout SP avec des paramètres d'entrée / sortie variables et des ensembles de résultats.

Merci

Réponse acceptée

Quelle API voulez-vous? Si vous pouvez traiter les grilles séparément: faites cela:

using(var multi = connection.QueryMultiple(...))
{
    while(!multi.IsConsumed) {
        // ...
    }
}

... a accès à:

  • Read() pour dynamic lignes dynamic - notant que chaque ligne implémente également IDictionary<string,object>
  • Read<T> () pour les lignes typées via des génériques
  • Read(Type) pour les lignes typées sans génériques
  • Read<DapperRow > () (en fait, ceci est juste le T que Read<T>() utilise pour implémenter Read() , mais peut-être plus pratique), ce qui offre un accès légèrement supérieur aux métadonnées

Si vous voulez déposer sur un IDataReader brut, faites ceci:

using(var reader = connection.ExecuteReader(...)) {
    // whatever you want
}

En ce qui concerne les paramètres: la classe DynamicParameters fournit un accès beaucoup plus riche au contrôle des paramètres, y compris la direction des paramètres, etc.




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