7

मैं विरासत डेटाबेस के साथ एकीकृत करने की ईर्ष्यापूर्ण स्थिति में हूं, सौभाग्य से रीडोनली उद्देश्यों के लिए, और एनएचबीर्नेट का उपयोग करना चुना है। अब तक सबकुछ बढ़िया रहा है, लेकिन मेरे पास एक नई आवश्यकता है जिसने मुझे अपने सिर को खरोंच कर दिया है।भेदभाव करने वाले फ्लूएंट एनएचबर्ननेट के साथ विरासत के एकाधिक स्तर

आज से पहले मेरे पास तालिका में एक स्तंभ था जो एक भेदभावकर्ता के रूप में कार्य करेगा, लेकिन अब यह पता चला है कि कुछ मामलों में मुझे एक से अधिक भेदभावकर्ता स्तंभ होना चाहिए। क्या यह NHibernate के साथ संभव है?

मैंने सूत्रों का उपयोग करने में देखा है, जो काम करता है, लेकिन अब मुझे यह मुद्दा है कि मुझे 'अज्ञात' उप-वर्गों को छोड़ने की आवश्यकता है (जिनके पास अभी तक मैपिंग नहीं है)। उदाहरण के लिए मैं इस है:

DiscriminateSubClassesOnColumn("") 
    .Formula("case ... when ... then ... when .. then ... else 'unknown' end"); 

मैं सब कुछ है कि 'अज्ञात' को फिल्टर करने में सक्षम होना चाहते हैं ...

संपादित करें: मुझे लगता है कि एक संभव समाधान AlwaysSelectWithValue() उपयोग करने के लिए हो सकता है, इसमें क्या प्रभाव पड़ता है? मेरा मानना ​​है कि यह force के रूप में nhibernate मैपिंग xml में समान है।

उत्तर

2
public BaseClassMap() 
{ 
    Where("discriminatorColumn <> 'unknown'"); 
    // or 
    Where("discriminatorColumn = 'known1' or discriminatorColumn = 'known2'"); 
} 
+0

मैंने इस तरह कुछ करने की कोशिश की, लेकिन यह शिकायत करता है कि भेदभावकर्ता कॉलम ज्ञात कॉलम नहीं है। – jonnii

+1

* भेदभावकर्ता कॉलम * उस कॉलम होना चाहिए जिसका आप सूत्र में भेदभाव कर रहे हैं। एनएच उन सभी कॉलम पर परवाह नहीं करता है जिन्हें आप निर्दिष्ट कर रहे हैं, लेकिन यह उपयोगी होने के लिए डेटाबेस में होना चाहिए – Firo

संबंधित मुद्दे