Dapper可以批处理一组存储过程调用吗?



Dapper可以批处理一组存储过程调用吗?我看到它在文档中支持多个结果,但我不确定是否可以使用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);

上面的代码用文本#spInsert, 3次重用IDbCommand。这使得批处理插入更加高效。

一般来说,如果你担心这个级别的性能,你可以在事务中包装批处理调用。

另外,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个记录集来迭代。

最新更新