c# - net - dapper vs entity framework
Varias declaraciones SQL en una ida y vuelta usando Dapper.NET (2)
Hay una buena característica en ADO.NET que le permite enviar múltiples instrucciones SQL a la base de datos en una ida y vuelta y recibir resultados para todas las declaraciones:
var command = new SqlCommand("SELECT count(*) FROM TableA; SELECT count(*) FROM TableB;", connection);
using(var reader = command.ExecuteReader())
{
reader.Read();
resultA = reader.GetInt32(0);
reader.NextResult();
reader.Read();
resultB = reader.GetInt32(0);
}
¿Hay alguna característica similar en Dapper.NET?
Sí, la extensión Dapper QueryMultiple
puede hacer eso:
string query = @"SELECT COUNT(*) FROM TABLEA;
SELECT COUNT(*) FROM TABLEB";
using (var multi = connection.QueryMultiple(query, null))
{
int countA = multi.Read<int>().Single();
int countB = multi.Read<int>().Single();
}
Según Marc Gravell, esta es la forma ideal de ejecutar múltiples consultas en un solo lote.
Nota: El creador de Dapper Sam Saffron ha publicado una explicación detallada con un ejemplo de código sobre el uso de QueryMultiple
para lograr esto.
var grid = connection.QueryMultiple("
SELECT COUNT(*) FROM TABLEA
SELECT COUNT(*) FROM TABLEB
SELECT COUNT(*) FROM TABLEC");
var lstResult = new List<int>();
var isNext = false;
do{
var first2 = info.Read<int>().Single();
lstResult.Add(first2);
isNext=info.IsConsumed;
}
while (!isNext);