2011-08-18 26 views

Trả lời

9

Dapper hỗ trợ các lệnh trạm trộn cho lưu trữ 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); 

Đoạn mã trên reuses IDbCommand với văn bản #spInsert, 3 lần. Điều này làm cho việc chèn hàng loạt hiệu quả hơn một chút.

Nói chung, nếu bạn lo lắng về mức độ hoàn hảo ở cấp độ này, bạn sẽ thực hiện cuộc gọi hàng loạt trong giao dịch.

hỗ trợ Ngoài ra Dapper bất cứ điều gì batch bạn quyết định gửi nó:

connection.Execute(@" 
    exeC#spInsert @i = @one 
    exeC#spInsert @i = @two 
    exeC#spInsert @i = @three", 
    new { one = 1, two = 2, three = 3 }); 

nào sẽ gây ra ba hàng được chèn vào.

Hơn nữa, nếu #spInsert trả lại kết quả, bạn có thể sử dụng QueryMultiple để thực hiện lô sẽ cung cấp cho bạn 3 bộ bản ghi để lặp qua.

+1

Sử dụng cách tiếp cận tương tự để gửi 19 cuộc gọi thủ tục dưới dạng một lô thay vì thực hiện chúng riêng lẻ, tôi đã cải thiện gấp 3 lần hiệu suất (141 so với 421 giây). Được sử dụng StringBuilder để chuẩn bị truy vấn và tên @param_i từ danh sách, trong đó tôi là chỉ mục. –

Các vấn đề liên quan