7
Dapper保存されたproc呼び出しのセットをバッチできますか?私はそれがドキュメント内の複数の結果をサポートしているが、Dapperを使って複数のproc呼び出しを実行できるかどうかはわかりません。Dapperはストアドプロシージャコールのセットをバッチできますか?
Dapper保存されたproc呼び出しのセットをバッチできますか?私はそれがドキュメント内の複数の結果をサポートしているが、Dapperを使って複数のproc呼び出しを実行できるかどうかはわかりません。Dapperはストアドプロシージャコールのセットをバッチできますか?
Dapperのは、記憶されprocsのためのバッチ処理コマンドをサポート:上記
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を再利用します。これにより、バッチインサートがより効率的になります。
一般に、このレベルのperfについて心配すると、トランザクションでバッチコールがラップされます。あなたはそれを送信することを決定するものは何でもバッチ
さらに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つのレコードセットを与えるバッチを実行できます。
個別の実行ではなく、19個のプロシージャ呼び出しを1つのバッチとして送信すると、パフォーマンスが3倍に向上します(141秒対421秒)。リストからクエリと@param_iの名前を準備するためにStringBuilderを使用しました。ここでiはインデックスです。 –