नए जेनेरिक पैरामीटर एपीआई में वास्तव में एक समस्या है - इसे नियमित रूप से स्वीकार करना चाहिए .NET null
(और नहीं DBNull.Value
), मैंने यह समस्या
खोली है इसे ट्रैक करने के लिए, इसे 4.0.3 में ठीक कर दिया जाएगा।
ध्यान दें कि दस्तावेज़ीकरण नोट
के रूप में कहते हैं, जेनेरिक एपीआई का पूरा बिंदु Value
. का उपयोग करने से बचना है संपत्ति, जो प्रकार की है object
. यदि आप सामान्य NpgsqlParameter<int>
. का उपयोग करते हैं लेकिन असाइन करें Value
, एपीआई के उद्देश्य को हराकर, आपका इंट बॉक्सिंग हो जाएगा। आपको TypedValue
. को असाइन करना चाहिए , जो कि int
. प्रकार का है और बॉक्स नहीं होगा। यही कारण है कि आप DBNull.Value
असाइन नहीं कर सकते हैं एक शून्य मान इंगित करने के लिए (यह एक अलग .NET प्रकार है)।
इस नए जेनेरिक एपीआई का उपयोग किया जाना चाहिए या नहीं, इस पर कुछ नोट्स:
- यदि आप बहुत से मान प्रकार लिख रहे हैं (उदा.
int
,DateTime
...) यह सभी बॉक्सिंग आवंटन को हटा देगा। क्या यह महत्वपूर्ण होने जा रहा है यह आपके आवेदन पर निर्भर करता है - प्रोफ़ाइल ध्यान से। - सामान्य रूप से जेनेरिक एपीआई को हमेशा गैर-जेनेरिक वाले के लिए प्राथमिकता दी जानी चाहिए जब प्रकार को संकलन-समय पर जाना जाता है। यह कंपाइलर को टाइप की शुद्धता की जल्दी जांच करने की अनुमति देता है और आपके कोड को स्पष्ट करता है - हम
List<string>
का उपयोग करते हैं के बजायArrayList
अच्छी कोडिंग के मामले में तब भी जब प्रदर्शन कोई समस्या न हो - जेनेरिक API का मुख्य (केवल?) दोष यह है कि यह Npgsql-विशिष्ट है, जो आपके कोड को अन्य डेटाबेस ड्राइवरों के लिए गैर-पोर्टेबल बनाता है (हालाँकि एक समस्या मौजूद है इसे (या ऐसा ही कुछ) ADO.NET का हिस्सा बनाने के लिए)।