2011-08-18 8 views

risposta

9

Dapper supporta i comandi di dosaggio per la stored procedure:

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

Il codice di cui sopra riutilizza l'IDbCommand con il testo #spInsert, 3 volte. Ciò rende gli inserti di dosaggio un po 'più efficienti.

In generale, se ci si preoccupa del perfetto a questo livello, si effettua il wrapping della chiamata batch in una transazione.

supporti Inoltre Dapper qualunque partita si decide di inviarlo:

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

che causerebbe tre file da inserire.

Inoltre, se #spInsert ha restituito un set di risultati, è possibile utilizzare QueryMultiple per eseguire il batch, in modo da fornire 3 set di record da scorrere.

+1

Utilizzando un approccio simile per inviare 19 chiamate di procedura come una partita invece di eseguirle individualmente, ho ottenuto un miglioramento delle prestazioni di circa 3 volte (141s vs 421s). StringBuilder utilizzato per preparare la query e nomi @param_i da un elenco, dove i è l'indice. –

Problemi correlati