जवाबों:
NHibernate शब्दार्थ:
सूची: संस्थाओं के संग्रह का आदेश दिया, डुप्लिकेट की अनुमति दी। IList
कोड में .NET का उपयोग करें । इंडेक्स कॉलम को NHibernate में मैप करना होगा।
सेट करें: अद्वितीय संस्थाओं का अनियोजित संग्रह, डुप्लिकेट की अनुमति नहीं है। Iesi.Collection.ISet
कोड में उपयोग करें (v4 से पहले NH) या System.Collections.Generic.ISet
(NH v4 +)। ओवरराइड करना GetHashCode
और Equals
डुप्लिकेट की व्यावसायिक परिभाषा को इंगित करना महत्वपूर्ण है । एक क्रम को परिभाषित करने या एक SortedSet
परिणाम में जिसके परिणामस्वरूप तुलना को परिभाषित करके हल किया जा सकता है ।
बैग: संस्थाओं की अनियंत्रित सूची, डुप्लिकेट की अनुमति। ICollection<T>
कोड में .NET का उपयोग करें । सूची के सूचकांक स्तंभ को मैप नहीं किया गया है और NHibernate द्वारा सम्मानित नहीं किया गया है।
NHibernate में ये सभी वस्तुएं इन सार डेटा प्रकारों (ADT) के अन्य कार्यान्वयन के समान हैं। मुझे आश्चर्य हुआ कि सेट्स और बैग्स को ऑनलाइन खोजना कितना मुश्किल है क्योंकि अन्य चीजों के लिए नाम कितने सामान्य हैं, इसलिए मैंने यहां कुछ लिंक और विवरण सूचीबद्ध किए हैं।
अधिक विस्तृत जानकारी के लिए निम्नलिखित पर एक नज़र डालें: सूचियाँ , सेट और बैग
सामान्य नियम हैं:
सूचियाँ डिफ़ॉल्ट रूप से क्रमबद्ध होती हैं, यदि आप किसी वस्तु को उसके सूचकांक द्वारा बाहर निकालने में सक्षम होना चाहते हैं, तो इनका उपयोग करें या आपको for
छोरों से अधिक अजीब तरह का शौक है foreach
। आपको उन तक पहुंचने की आवश्यकता नहीं है जैसे कि आपको एक लिंक्ड सूची में आवश्यकता होगी । यह ADT डुप्लिकेट को अनुमति देता है।
कृपया ध्यान दें! हालाँकि, सूचियों को ब्रायनड के रूप में वर्णित किया गया है, उनके उत्तर में यह कहते हुए पूरी तरह से कुछ भी नहीं है कि यह उस क्रम में होना चाहिए जब आप किसी HQL क्वेरी को निष्पादित करते हैं जब तक कि आप आदेश द्वारा एक आदेश निर्दिष्ट नहीं करते। यह इस वजह से है कि कुछ लोग इसके बजाय सेट या बैग का उपयोग करना पसंद करते हैं, ताकि यह आदेश दिए जाने का भ्रम न दे। हालांकि मैं यह कहता हूं, अधिकांश समय वे एक दृश्यमान क्रम में दिखाई देंगे, क्योंकि वे इस क्रम में सूची में जोड़े जाते हैं कि वे क्वेरी में पाए जाते हैं जो NHibernate चलाता है।
सेट डिफ़ॉल्ट रूप से क्रमबद्ध नहीं होते हैं , आप किसी भी चर को सीधे सूचकांक के माध्यम से एक्सेस नहीं कर सकते हैं। सेट डिफ़ॉल्ट रूप से उपरोक्त तीनों में से एकमात्र ADT है जो अपनी वस्तुओं की विशिष्टता बनाए रखता है । यदि आपके पास डुप्लिकेट शामिल नहीं करने की आवश्यकता है, तो आपके पास एक संग्रह है, तो ये बहुत अच्छे हैं।
बैग (या मल्टीसेट्स ) हैं, जैसा कि आप ऊपर दिए गए लिंक से देख सकते हैं, एक प्रकार का सेट जो इसके भीतर की वस्तुओं को अन्य वस्तुओं के डुप्लिकेट होने की अनुमति देता है। ये आम तौर पर उपयोग नहीं किए जाते हैं, क्योंकि सूचियों के आदेश को नजरअंदाज किया जा सकता है, और इसलिए इसे एक बैग के रूप में माना जाता है।
NHibernate में इनका उपयोग कैसे किया जाता है, इस संबंध में, डेटाबेस से अलग से कुछ भी नहीं निकाला जाता है, इस पर निर्भर करता है कि आप किस ADT का चयन करते हैं, यह वही है जो आप इसका उपयोग करना चाहते हैं, इसके लिए आपको अलग-अलग ADT का चयन करना चाहिए।
व्यक्तिगत रूप से, मैं ज्यादातर चीजों के लिए सेट का उपयोग करता हूं क्योंकि मुझे आमतौर पर बाल वस्तुओं को अद्वितीय होने की आवश्यकता होती है और आदेश देना कोई मुद्दा नहीं है। हालाँकि मैं उन सूचियों का उपयोग करूँगा जहाँ मेरे पास वस्तुओं का एक समूह है जो मुझे किसी चीज़ के लिए आदेश दिया गया है, उदाहरण के लिए, इस आदेश को प्राप्त करने के लिए मुझे HQL क्वेरी में "ऑर्डर" को मैन्युअल रूप से सेट करने की आवश्यकता है।
खैर प्राथमिक अंतर यह है कि सूची में तत्वों को एक अंतर्निहित आदेश दिया गया है, सूची में उनकी स्थिति द्वारा अनुक्रमित। सेट और बैग आमतौर पर एक तुलनित्र द्वारा या उन वस्तुओं के डीबी से "ऑर्डर" किया जा सकता है, जो तब लागू होता है जब वे आइटम डीबी से बाहर आते हैं। व्यक्तिगत रूप से, मैंने कभी भी बैग का उपयोग नहीं किया है ... अगर मुझे पता है कि मुझे जो डेटा चाहिए वह क्रमिक रूप से मुझे दिया गया है तो मैं सूची का उपयोग करता हूं अन्यथा मैं सेट का उपयोग करता हूं।
ISet
बजाय नियमित रूप से उपयोग नहीं कर सकतेIesi
?