¿Puede Dapper realizar un lote de un conjunto de llamadas de proceso almacenadas?

.net c# dapper

Pregunta

¿Puede Dapper realizar un lote de un conjunto de llamadas de proceso almacenadas? Veo que admite múltiples resultados en la documentación, pero no estoy seguro de si puede ejecutar múltiples llamadas de proceso almacenadas utilizando Dapper.

Respuesta aceptada

Dapper admite comandos de procesamiento por lotes para procesos almacenados:

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);

El código anterior reutiliza el IDbCommand con el texto #spInsert , 3 veces. Esto hace que las inserciones en lotes sean un poco más eficientes.

En general, si te preocupa el rendimiento en este nivel, envolverías la llamada por lotes en una transacción.

Además, Dapper admite cualquier lote que decidas enviar:

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

Lo cual provocaría que se insertaran tres filas.

Además, si #spInsert devolvió un conjunto de resultados, podría usar QueryMultiple para ejecutar el lote, que le proporcionaría 3 conjuntos de registros para recorrer.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué