Dapper संग्रहित प्रो कॉल का एक सेट बैच कर सकते हैं? मुझे लगता है कि यह प्रलेखन में एकाधिक परिणामों का समर्थन करता है लेकिन मुझे यकीन नहीं है कि क्या आप डैपर का उपयोग करके एकाधिक संग्रहित प्रो कॉल निष्पादित कर सकते हैं।क्या डैपर बैच संग्रहित प्रो कॉल का एक सेट बैच कर सकता है?
7
A
उत्तर
9
डैप्पर संग्रहीत 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 के बारे में चिंता करते हैं तो आप लेनदेन में बैच कॉल को लपेटेंगे।
साथ ही साफ-सुथरी का समर्थन करता है जो कुछ भी बैच आप इसे भेजने के लिए तय:
connection.Execute(@"
exeC#spInsert @i = @one
exeC#spInsert @i = @two
exeC#spInsert @i = @three",
new { one = 1, two = 2, three = 3 });
कौन सा तीन पंक्तियों का कारण होता है सम्मिलित करने के लिए।
और अधिक, यदि #spInsert
ने परिणाम सेट लौटाया तो आप बैच निष्पादित करने के लिए QueryMultiple
का उपयोग कर सकते हैं जो आपको 3 रिकॉर्ड सेटों को फिर से चालू करने के लिए उपयोग करेगा।
1 प्रक्रिया प्रक्रियाओं को व्यक्तिगत रूप से निष्पादित करने के बजाए एक बैच के रूप में भेजने के लिए एक समान दृष्टिकोण का उपयोग करके मुझे प्रदर्शन में ~ 3 गुना सुधार हुआ (141 बनाम 421 एस)। प्रयुक्त स्ट्रिंगबिल्डर एक प्रश्न से क्वेरी और @param_i नाम तैयार करने के लिए, जहां मैं सूचकांक हूं। –