2012-06-18 13 views
6

क्या किसी को NotSupportedException को दूर करने के किसी भी तरीके से पता नहीं है? मैं एक उपयोगकर्ता के खिलाफ एक विधि है:एनएचबर्ननेट नॉट्सपोर्टेड अपवाद पर काबू पाने

public virtual bool IsAbove(User otherUser) 
{ 
    return HeirarchyString.StartsWith(otherUser.HeirarchyString); 
} 

और मैं क्या करना चाहते हैं:

_session.Query<User>.Where(x => loggedInUser.IsAbove(x)); 

लेकिन यह एक NotSupportedException फेंकता है। वास्तविक दर्द हालांकि यह है कि

_session.Query<User>.Where(x => loggedInUser.HeirarchyString.StartsWith(x.HeirarchyString)); 

बिल्कुल ठीक काम करता है। मुझे यह समाधान के रूप में पसंद नहीं है, क्योंकि इसका मतलब यह है कि यदि मैं बदलता हूं कि IsAbove विधि कैसे काम करती है, तो मुझे उन सभी स्थानों को याद रखना होगा जहां मैंने इसे अपडेट करना चाहते हैं, जब भी मैं इसे अपडेट करना चाहता हूं

+1

बीटीडब्ल्यू, "एच ** आईई ** रैची" :) – AakashM

+0

आह बकवास, मैं हमेशा यह इंगित करने वाला पहला व्यक्ति हूं जब लोग भी जादू नहीं कर सकते! वर्षों से यह गलत हो रहा होगा: $ –

उत्तर

3

नाम दें विनिर्देश अभिव्यक्ति और पुन: उपयोग करें, उदाहरण के लिए:

public Expression<Func<....>> IsAboveSpecification = (...) => ...; 

public virtual bool IsAbove(User otherUser) 
{ 
    return IsAboveSpecification(HeirarchyString, otherUser.HeirarchyString); 
} 

पुन: उपयोग IsAbove आवश्यकतानुसार क्वेरी में विनिर्देशन। यदि IsAbove() विधि का उपयोग अक्सर प्रयोग किया जाता है तो अभिव्यक्ति पर संकलन() विधि के परिणाम को कैश कर सकते हैं।

+0

मुझे ओपी के समान समस्या है। काम करने के लिए यह समाधान नहीं मिल सकता है। पहली जगह में, मैं ऑब्जेक्ट पर कॉल करने में सक्षम होना चाहता हूं, इसलिए मुझे प्रारंभकर्ता को कन्स्ट्रक्टर में ले जाना पड़ा क्योंकि 'यह' सदस्य प्रारंभकर्ता में उपलब्ध नहीं था। इससे भी बदतर, मुझे विनिर्देश अभिव्यक्ति को कॉल करने का प्रयास करते समय एक त्रुटि हो रही है: "विधि, प्रतिनिधि या घटना अपेक्षित"। कोई सुझाव? –

+0

कॉलिंग का प्रयास किया। कॉम्पाइल()। अभिव्यक्ति पर() आमंत्रित करें। यह अब संकलित करता है, लेकिन एक क्वेरी से "IsAbove" फ़ंक्शन को कॉल करते समय एक ही अपवाद प्राप्त करना। –

+0

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

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