Looking for dapper Keywords? Try Ask4Keywords

Dapper.NET वैल्यू इनलाइनिंग


उदाहरण

कभी-कभी एक पैरामीटर के रूप में इलाज के लिए एक पैरामीटर की सुविधा (रखरखाव और अभिव्यक्ति के संदर्भ में), प्रदर्शन में इसकी लागत से आगे निकल सकती है। उदाहरण के लिए, जब पृष्ठ आकार एक विन्यास सेटिंग द्वारा तय किया जाता है। या कोई स्थिति मूल्य एक करने के लिए मिलान किया जाता है enum मूल्य। विचार करें:

var orders = connection.Query<Order>(@"
select top (@count) * -- these brackets are an oddity of SQL Server
from Orders
where CustomerId = @customerId
and Status = @open", new { customerId, count = PageSize, open = OrderStatus.Open });

यहाँ केवल वास्तविक पैरामीटर customerId - अन्य दो छद्म पैरामीटर हैं जो वास्तव में नहीं बदलेंगे। अक्सर आरडीबीएमएस एक बेहतर काम कर सकता है यदि यह उन्हें स्थिरांक के रूप में पहचानता है। डैपर के पास इसके लिए एक विशेष वाक्यविन्यास है - {=name} बजाय @name - जो केवल संख्यात्मक प्रकारों पर लागू होता है। (यह SQL इंजेक्शन से किसी भी हमले की सतह को कम करता है)। एक उदाहरण इस प्रकार है:

var orders = connection.Query<Order>(@"
select top {=count} *
from Orders
where CustomerId = @customerId
and Status = {=open}", new { customerId, count = PageSize, open = OrderStatus.Open });

Dapper SQL जारी करने से पहले शाब्दिक के साथ मूल्यों की जगह लेता है, इसलिए RDBMS वास्तव में कुछ इस तरह देखता है:

select top 10 *
from Orders
where CustomerId = @customerId
and Status = 3

यह विशेष रूप से तब उपयोगी होता है जब RDBMS सिस्टम को न केवल बेहतर निर्णय लेने की अनुमति होती है, बल्कि वास्तविक मापदंडों को रोकने वाली क्वेरी योजनाओं को खोलने के लिए भी। उदाहरण के लिए, यदि कोई कॉलम किसी पैरामीटर के विरुद्ध है, तो उस कॉलम पर विशिष्ट मान वाले फ़िल्टर किए गए इंडेक्स का उपयोग नहीं किया जा सकता है। ऐसा इसलिए है क्योंकि अगली क्वेरी में उन निर्दिष्ट मानों में से एक के अलावा एक पैरामीटर हो सकता है।

शाब्दिक मूल्यों के साथ, क्वेरी ऑप्टिमाइज़र फ़िल्टर्ड इंडेक्स का उपयोग करने में सक्षम है क्योंकि यह जानता है कि भविष्य के प्रश्नों में मूल्य बदल नहीं सकता है।