Dapper可以批量處理一組存儲的proc調用嗎?

.net c# dapper

Dapper可以批量處理一組存儲的proc調用嗎?我看到它支持文檔中的Multiple Results,但我不確定你是否可以使用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次。這使得批處理插入更有效。

通常,如果您擔心此級別的perf,您可以在事務中包裝批處理調用。

此外,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
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因