Dapper peut-il grouper un ensemble d'appels proc stockés?

.net c# dapper

Question

Dapper peut-il grouper un ensemble d'appels proc stockés? Je vois qu'il supporte plusieurs résultats dans la documentation mais je ne suis pas sûr que vous puissiez exécuter plusieurs appels proc stockés avec Dapper.

Réponse acceptée

Dapper prend en charge les commandes de traitement par lots pour les processus stockés:

connection.Execute("create table #t (i int)");
connection.Execute("create proc #spInsert @i int as insert #t values (@i)");
connection.Execute("#spInsert", new[] { new { i = 1 }, new {i = 2}, new {i = 3} }, 
    commandType: CommandType.StoredProcedure);

var nums = connection.Query<int>("select * from #t order by i").ToList();

nums[0].IsEqualTo(1);
nums[1].IsEqualTo(2);
nums[2].IsEqualTo(3);

Le code ci-dessus réutilise l'IDbCommand avec le texte #spInsert , 3 fois. Cela rend les insertions de lot un peu plus efficaces.

En général, si vous vous inquiétez à propos de perf à ce niveau, vous encapsulez l'appel par lots dans une transaction.

De plus, Dapper prend en charge tous les lots que vous décidez de lui envoyer:

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

Ce qui provoquerait l'insertion de trois lignes.

De plus, si #spInsert renvoyé un jeu de résultats, vous pouvez utiliser QueryMultiple pour exécuter le lot qui vous donnera 3 jeux d'enregistrements.




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