2011-03-09 12 views
7

मैं एक एएसपीएनटी एमवीसी ग्रिड (विशेष रूप से टेलिकिक) पर LINQ से NHibernate के IQueryable कार्यान्वयन का उपयोग कर रहा हूं, जहां मुझे पता है कि मुझे इस विशेष ग्रिड के लिए उत्सुकता से कुछ लाने की आवश्यकता होगी।कुल मिलाकर चयन करते समय आप LINQ से NHibernate के Fetch अपवाद से कैसे निपटते हैं?

तो मैं क्वेरी कि कुछ इस तरह दिखता है:

var query = from s in repository.Query<MyClass>() 
        orderby s.Property.Name, s.Name 
        select s; 

query = query.Fetch(x => x.Property); 

अब, अगर मैं query.ToList() पर अमल, सब कुछ ठीक है, और मैं पुष्टि कर सकते हैं कि यह एक एकीकरण परीक्षण में काम करता है।

यह कमाल है।

हालांकि, अगर मैं query.Count() या कुछ और कि क्वेरी को एकत्रित करती निष्पादित, मैं एक अपवाद प्राप्त करें:

क्वेरी निर्दिष्ट प्राप्त करने में कठिनाई में शामिल होने के लिए, लेकिन प्राप्त किए गए संघ के मालिक था मौजूद नहीं चयन सूची [FromElement {स्पष्ट, नहीं एक संग्रह में शामिल होने में, में शामिल होने के लाने, लाने गैर आलसी गुण, classAlias ​​= 0, भूमिका =, TableName = [संपत्ति], tableAlias ​​= property1, origin = MyClass myclass0_ , colums = {myclass0_.PropertyGuid , कक्षाएनए मुझे = संपत्ति}}] [काउंटर (फ़ेच (.henBy (OrderBy (NHibernate.Linq.NhQueryable`1 [MyClass], उद्धरण ((एस,) => (एस। प्रॉपर्टी नाम)),) , उद्धरण ((रों,) => (s.Name)),), उद्धरण ((एक्स, ) => (x.Property)),),)]

मुझे पता है कि यह कोशिश कर रहा है मुझे यह बताने के लिए कि मैं उत्सुकता से संपत्ति नहीं ले सकता क्योंकि MyClass चुनिंदा नहीं है, लेकिन समस्या यह है कि गणना() वास्तव में ग्रिड के माध्यम से बुलाया जा रहा है, और मेरे कोड से बाहरी रूप से संभाला जाता है।

मुझे बस इतना करना है कि ग्रिड को एक IQueryable दें और यह स्वयं ही पेजिंग, सॉर्टिंग इत्यादि को संभालने में सक्षम होना चाहिए।

क्या किसी और को NHBernate Fetching के साथ इस समस्या को हल करना पड़ा और आपने इसे कैसे हल किया?

उत्तर

0
var query = from s in repository.Query<MyClass>() 
        orderby s.Property.Name, s.Name 
        select s; 
query = query.Fetch(x => x.Property).ToList(); 

और तुम जाओ और

query.Count() 

करते हैं और इसे चालू हालत में होना चाहिए कर सकते हैं के बाद।

क्यों है कि मैं उस पर शक करने के रूप में करने के लिए

AsEnumerable()

या

AsQueryable()

लेकिन यकीन नहीं कुछ है यह क्यों है मेरे पास समान पी था roblem और यह हल ...

+0

उस दृष्टिकोण के साथ समस्या यह है कि आप उस क्वेरी में सचमुच सबकुछ वापस लाएंगे। बाद में ग्रिड सक्रिय रूप से उस क्वेरी को पेजिंग कर रहा है, इसलिए मैं केवल डेटाबेस पर जाता हूं और एक समय में एक पृष्ठ प्राप्त करता हूं।लेकिन ग्रिड को पेजिंग को सही तरीके से संभालने के लिए कुल गिनती की भी आवश्यकता है। मेरे प्रश्न में यह प्रश्न "आधार" क्वेरी है कि ग्रिड बंद हो रहा है। – Joseph

+0

मुझे एक ही समस्या है और यह समाधान मदद नहीं करता है क्योंकि मेरे पास एक ही प्रदर्शन समस्या है। – nfplee

+0

@ जोसेफ: आपका मानचित्रण कैसे स्थापित किया गया है? वहाँ सेट उत्सुक लोडिंग के बारे में क्या? – cpoDesign