Может ли Dapper организовать набор сохраненных вызовов proc?

.net c# dapper

Вопрос

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

Принятый ответ

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 поддерживает все партии, которые вы решили отправить:

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

Это приведет к вставке трех строк.

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему