8

Dapperは一連のストアド プロシージャ コールをバッチ処理できますか? ドキュメントで複数の結果をサポートしていることがわかりますが、Dapper を使用して複数のストアド プロシージャ コールを実行できるかどうかはわかりません。

4

1 に答える 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 });

これにより、3 つの行が挿入されます。

さらに#spInsert、結果セットが返された場合はQueryMultiple、バッチを実行するために使用できます。これにより、反復する 3 つのレコード セットが得られます。

于 2011-08-19T05:47:08.937 に答える