NHibernate - how to query against subclass properties while returning the super class? -
NHibernate का उपयोग करना;
क्लास क्लास बी इनहेरिट्स क्लास ए प्रॉपर्टी प्रॉप 2 एंड क्लास क्लास सी इनहेरिट्स क्लास ए प्रॉपर्टी प्रॉप 3 एंड क्लास
मैं निम्न प्रकार से एक क्वेरी कैसे दिखाऊंगा:
से A जहां प्रॉप 1 = 'फू' और (यदि ए है बी) तो बी .प्रॉप 2 = 'बार' या (अगर ए सी है) तो सीपीआर 3 = 'बार')
क्या यह संभव है कि Nhibernate.Linq का उपयोग करना संभव है? एचकेएल या मापदंड एपीआई के बारे में क्या? चूंकि एचक्यूएल और आईसीआरटीरिया डोमेन-क्वेरी टूल्स हैं इसलिए मुझे इस तरह की कार्यक्षमता की अपेक्षा करना कठिन लगता है।
एपीएआईके एकमात्र करीबी चीज आईसीआरटीरिया के अभिव्यक्ति का उपयोग कर रही है। एससीएल () जहां आप सुपरक्लास पूछते हैं लेकिन शुद्ध वर्ग वाले उप-वर्ग विशिष्ट टुकड़े को इंजेक्ट करते हैं। वहाँ, अभिव्यक्ति की तरह होगा
crit.Add (अभिव्यक्ति। SQL (@ "((alias}। DiscrimCol =: subClassADiscrimVal और {alias} .Col2 =: barVal) या ({ उपनाम} .डिस्क्रमॉल =: उप-क्लास बीडीस्क्रीमवाल और {उपनाम} .कॉल 3 =: बारवील)) ", नया ऑब्जेक्ट [] {" सब ए "," सबबी "," बार "}, नया आईटीआईपी [] {NHibernateUtil.String, NHibernateUtil.String , NHibernateUtil.String}));
अच्छा नहीं है लेकिन यह काम करता है
दूसरा तरीका एक ISQLQuery
का उपयोग करेगा, जो कम से कम चयन का हिस्सा डोमेन विशिष्ट होने की अनुमति देता है ( और .addEntity ()
) का उपयोग करके आप अपने प्रबंधित सुपरक्लास का चयन कर सकते हैं और WHERE भाग में उप-वर्ग विशिष्ट टुकड़े शामिल हैं
========= UPDATE === =======
एक दूसरे विचार पर, यह एचक्यूएल या आईसीट्रेटिया के माध्यम से कार्यान्वित करने का एक तरीका है, लेकिन यह एक वैकल्पिक हल से अधिक है और कम प्रदर्शनकर्ता है क्योंकि इसमें उपकुंजी शामिल है आईसीआरटीरिया में उदाहरण:
nhSes.CreateCriteria (typeof (सुपर))। जोड़ें (प्रतिबंध .डिसीग्नाशन ()। जोड़ें (Subqueries.PropertyIn ("आईडी", पृथक कैरेक्ट्रिया। के लिए (टाइपफ़ (ChildA) ) .सेटप्रोजेक्शन (प्रोजेक्शंस.आइडी ())। (प्रतिबंधों। एईसी ("चाइल्डएप्रप", बारवील)))। जोड़ें (उपकुंजीय गुणों में ("आईडी", पृथक कैरेक्ट्रिया। के लिए (टाइपफ (चाइल्डब))। प्रोप्रोजेक्शन Id ()) .Add (Restrictions.Eq ("ChildBProp", barVal))))
मैं प्रत्येक बच्चे को प्रश्नोत्तरी कर रहा हूँ, उसका आईडी प्रोजेक्ट करें और फिर सुपर क्लास का चयन करें, सीमित करें अनुमानित बाल आईडी से आईआईडी के साथ आईडी
Comments
Post a Comment