Может ли Dapper пакетировать набор сохраненных вызовов процедур? - PullRequest
8 голосов
/ 18 августа 2011

Может Dapper пакетировать набор сохраненных вызовов процедур? Я вижу, что он поддерживает несколько результатов в документации, но я не уверен, что вы можете выполнить несколько сохраненных вызовов процедур с помощью Dapper.

1 Ответ

10 голосов
/ 19 августа 2011

Dapper поддерживает пакетные команды для хранимых процедур:

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

Приведенный выше код повторно использует IDbCommand с текстом #spInsert 3 раза.Это делает пакетные вставки немного более эффективными.

В общем, если вы беспокоитесь о перфекте на этом уровне, вы должны заключить пакетный вызов в транзакцию.

Кроме того, Dapper поддерживает любой пакет, который вы решили отправить:1011 * Что может привести к вставке трех строк.

Более того, если #spInsert вернул набор результатов, вы можете использовать QueryMultiple для выполнения пакета, который даст вам 3 набора записей для итерации.

...