Dapper可以批处理一组存储的过程调用吗?我在文档中看到它支持多个结果,但我不确定您是否可以使用 Dapper 执行多个存储的 proc 调用。
问问题
3370 次
1 回答
11
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 与 text 重用了#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 个记录集进行迭代。
于 2011-08-19T05:47:08.937 回答