2011-10-21 7 views
5

में एकाधिक fetch मेरे पास <many-to-one> के साथ एक संबद्ध इकाई है और उस इकाई में दो <many-to-one> है जो मैं एक बार में लाने के लिए चाहता हूं। मैं इस प्रश्न के द्वारा इस लक्ष्य को हासिल कर सकते हैं:ThenFetch

var tshead = session.Query<MainEntity>() 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other) 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another) 
       .Take(10) 
       .ToList(); 

आप देख सकते हैं मैंने लिखा करने के लिए दो बार .Fetch(r=>r.FirstAssoc) मुझे यकीन है कि मैं इस से बच सकते हैं कर रहा हूँ, लेकिन मैं कैसे यह पता लगाने नहीं कर सकते था। कोई उपाय ?

धन्यवाद!

+1

मुझे नहीं लगता कि आप इससे बच सकते हैं, जब तक कि 'Fetch (r => r.FirstAssoc.Another)' काम करता है, जो मुझे संदेह है। –

+0

@ डिएगो धन्यवाद, आपका संदेह पुष्टि है (अभिव्यक्ति बहुत जटिल अपवाद)। लेकिन यह अच्छा होगा। –

+0

मेरे पास यह वही समस्या है, हालांकि मेरा फर्स्टएसोक एक संग्रह है, इसलिए यह FetchMany.ThenFetch.FetchMany.ThenFetch है। इस के लिए एक समाधान प्यार करेंगे। – mikeschuld

उत्तर

3

आप एक विशिष्ट 'MainEntity' का चयन करें तो आप यह इतना तरह QueryOver उपयोग कर सकते हैं:

FirstAssoc firstAssoc = null; 
Other other = null; 
Another another = null; 

tshead = session.QueryOver<MainEntity>() 
       .Where(x => x.Id == id) 
       .JoinAlias(x => x.FirstAssoc,() => firstAssoc) 
       .JoinAlias(() => firstAssoc.Other,() => other) 
       .JoinAlias(() => firstAssoc.Another,() => another) 
       .SingleOrDefault(); 

मैं इसके बारे में यहां लिखा है:

http://www.philliphaydon.com/2011/04/nhibernate-querying-relationships-are-depth/

आप नहीं कर सकते हैं कार्य करें:

एक-कई-कई

केवल वन-वन-वन

मुझे यकीन नहीं है कि आप कई-एक-एक कर सकते हैं, यह बदलना बहुत कठिन होगा।

+0

@Diego - सीसी जब से आप रुचि रखते हैं। – Phill

+0

+1, लेकिन आप QueryOver का उपयोग कर रहे हैं, क्या हम linqtonh के साथ इसे प्राप्त कर सकते हैं? पीएस आपका ब्लॉग वास्तव में दिलचस्प है :) –

+0

@ फ़ेलिस - सुनिश्चित नहीं है कि आप इसे क्वेरी के साथ कर सकते हैं, मुझे संदेह है कि यह संभव नहीं है, लेकिन मेरे पास इस सप्ताह के अंत में एक खेल होगा कि मैं कितना दूर प्राप्त कर सकता हूं। किसी भी कारण से आप QueryOver का उपयोग नहीं कर सकते? मेरे ब्लॉग के बारे में टिप्पणी के लिए धन्यवाद :) सराहना की। – Phill