2012-10-05 5 views
5

Ho visto QueryMultiple da Dapper doc ufficiale come qui di seguito, è conveniente!può Dapper implementare più inserimenti o aggiornamenti di eliminazione come 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(); 
    ... 
} 

Ora, quando elimino il record dalla tabella padre, desidero eliminare il record correlato dalla tabella figlio. può Dapper adattarsi? Sembra che come sotto.

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

Qualsiasi aiuto sarà apprezzato!

+0

Come BK. osserva, * qualsiasi * comando SQL può eseguire più operazioni - l'unico significato in 'QueryMultiple' è il modo in cui elabora la griglia dei risultati per ottenere i dati. Non è necessario modificare nulla per eseguire il comando multi-statement - solo "Execute (sql, param)" dovrebbe andare bene. –

risposta

3

Sì, è possibile semplicemente chiamare la connessione.Eseguire e consente già più comandi come si sta tentando di fare, lo stesso che ExecuteQuery consente su SqlCommand, che è tutto ciò che Dapper chiama in ogni caso.

+0

BK, grazie per la risposta. è alternativa alla transazione dapper? Qual'è la differenza tra loro? e quale è meglio delle prestazioni? Grazie ancora. –

+0

@Kevin puoi chiarire questa domanda? Sembra che riguardi le transazioni ... puoi davvero usare le transazioni con dapper, ma non lo farà automaticamente (c'è un parametro per questo). Re "meglio"/"performance" - quali 2 (o più) cose stiamo comparando qui? –

+0

@Marc Gravell scusa per la domanda poco chiara! quando incontro con più piani di implementazione SQL. a quale funzione verrà data priorità? Connection.Execute (SQL, param) o Connection.Execute (SQL stringa, dinamico param = null, transazione IDbTransaction = null, int? CommandTimeOut = null) –

Problemi correlati