2014-09-02 2 views
3

Avec pimpant, je peux faire batch exécuter pour les procédures stockées, quelque chose de similaire à:Dapper QueryMultiple Procédures stockées w/o la cartographie aux objets

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 des données que j'ai vu jusqu'à présent est à l'aide

results.Read<Type>() 

si les résultats ne correspondent pas à un objet? Par exemple, j'écris un code "générique" pour exécuter n'importe quel SP avec des paramètres d'entrée/sortie variables &.

Merci

Répondre

2

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

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

... a accès à:

  • Read() pour dynamic lignes - en notant que chaque ligne met également en œuvre IDictionary<string,object>
  • Read<T>() pour dactylographiée lignes par génériques
  • Read(Type) pour les lignes dactylographiées sans génériques
  • Read<DapperRow>() (en fait, c'est juste le T que Read<T>() utilise pour mettre en œuvre Read(), mais peut-être plus pratique), qui offre un accès un peu plus aux métadonnées

Si vous souhaitez déposer une IDataReader cru, faire que:

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 le paramètre direction etc.

+0

Ainsi, chaque .Lire() renvoie une seule grille de résultats lorsque l'ordre de "exec" a été envoyé, correct? En outre, lorsque vous dites .ExecuteReader, il s'agit d'une méthode d'extension fournie par Dapper qui donne un accès brut, similaire à DataReader présent dans ADO.NET? Enfin, une question, DP pourrait être utilisé avec QueryMultiple et ExecuteReader? BTW, j'ai regardé la vidéo sur Pluralsight sur Dapper, semble très bien. – Bill

+0

"oui" (bon, en fait c'est dans l'ordre du 'select' qui est exécuté - il ne voit rien de plus que ça)," oui ", et" oui " –

+0

Une autre question, si je suis en utilisant QueryMultiple et DynamicParameters, je pourrais passer le sql comme plusieurs appels de procédures stockées, séparés par ";", et fournir un seul objet DynamicParameter ayant tous les paramètres pour tous les SPs? Merci – Bill