2012-10-05 23 views
5

He visto QueryMultiple de Dapper official doc como a continuación, ¡es conveniente!puede Dapper implementar múltiples eliminar insertar o actualizar como QueryMultiple?

 var sql = @" 
select * from Customers where CustomerId = @id 
select * from Orders where CustomerId = @id 
select * from Returns where CustomerId = @id"; 

using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) 
{ 
    var customer = multi.Read<Customer>().Single(); 
    var orders = multi.Read<Order>().ToList(); 
    var returns = multi.Read<Return>().ToList(); 
    ... 
} 

Ahora, cuando se borra del registro de padres y mesa, quiero borrar registro relacionado con niños de mesa. puede Dapper encajarlo? Parece que a continuación.

var sql = @"delete from tb_role where [email protected] 
          delete from tb_rolepermission where [email protected] 
          delete from tb_userrole where [email protected] 
     "; 
     var param = new { ID=id }; 

connection.EXECUTEMultiple(sql, param).......... 

¡Cualquier ayuda será apreciada!

+0

Como BK. observa, * cualquier comando * SQL puede realizar múltiples operaciones; el único significado en 'QueryMultiple' es cómo procesa la grilla de resultados para sacar los datos. No necesita cambiar nada para ejecutar su comando de instrucción múltiple; simplemente 'Execute (sql, param)' debería estar bien. –

Respuesta

3

Sí, puede simplemente llamar a connection.Execute y ya permite varios comandos como usted está tratando de hacer, lo mismo que ExecuteQuery permite en SqlCommand, que es todo lo que Dapper está llamando de todos modos.

+0

BK, gracias por su respuesta. ¿Es una alternativa de transacción inteligente? ¿Cuál es la diferencia entre ellos? y que es mejor sobre el rendimiento? Gracias de nuevo. –

+0

@Kevin ¿Puedes aclarar esa pregunta? Parece tratarse de transacciones ... de hecho puede usar transacciones con dapper, pero no lo hará automáticamente (hay un parámetro para eso). Re "mejor"/"rendimiento": ¿qué 2 (o más) cosas estamos comparando aquí? –

+0

@Marc Gravell ¡Perdón por una pregunta poco clara! cuando se reúna con un plan de implementación SQL múltiple. ¿a qué función se le dará prioridad? connection.Execute (sql, param) o connection.Execute (string sql, param dinámico = null, IDbTransaction transaction = null, int? CommandTimeout = null) –

Cuestiones relacionadas