2012-04-30 8 views
7

यदि मेरे पास BlogEntries संग्रह के साथ एक ब्लॉग इकाई है जिसमें सैकड़ों प्रविष्टियां हो सकती हैं, तो पहले ईएफ कोड के साथ सर्वर-साइड पेजिंग कार्यक्षमता जोड़ने का कोई तरीका है? उदाहरण के लिए यदि मैं एक ठेठ करता हूं .किप (एक्स)। टेक (वाई) जैसे आप डीबीसेट पर करेंगे, क्या यह पूरे संग्रह को आलसी लोड करेगा और इसे स्मृति में पृष्ठ देगा?इकाई फ्रेमवर्क कोड में पहले नेविगेशन संग्रह में पेजिंग जोड़ने का कोई तरीका है?

उत्तर

14

यदि आप सीधे DbSet से पूछते हैं तो आप टेक और छोड़ें का उपयोग कर सकते हैं और यह वास्तव में डेटाबेस सर्वर पर पेजिंग निष्पादित करेगा (इन विधि कॉल को SQL में अनुवादित किया जाता है)। तो यह अपेक्षा के अनुरूप काम करता है:

// Loads only 10 expected entries through Linq-to-entities 
var entries = context.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10); 

खबरदार लोड इकाई पर कि पेजिंग नेविगेशन गुण इस तरह से काम नहीं करता है:

var blog = context.Blogs.First(); 
// Lazy loading always loads all related entries and executes ordering and 
// paging through Linq-to-objects! 
var entires = blog.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10); 

आप नेविगेशन संपत्ति पर पेजिंग प्राप्त करना चाहते हैं तो आप स्पष्ट लोड हो रहा है

का उपयोग करना चाहिए
var blog = context.Blogs.First(); 
var dbEntry = context.Entry(blog); 
// This is the way to use Linq-to-entities on navigation property and 
// load only subset of related entities 
var entries = dbEntry.Collection(b => b.BlogEntries) 
        .Query() 
        .OrderBy(e => e.Date) 
        .Skip(10) 
        .Take(10) 
        .Load(); 
+1

धन्यवाद! मुझे खुशी है कि इसे ईएफ के साथ पूरा करने का एक पिछला तरीका है। मैं भविष्य के संस्करणों में उम्मीद कर रहा हूं कि इसमें ऐसा करने का एक तरीका होगा, इसलिए इसे पूरा करने के लिए हमें डीबीकॉन्टेक्स्ट पर जाना नहीं है। क्या आपको पता है कि यह करता है। गणना() और .एनी() संग्रह को लोड किए बिना (चयन गणना (1) और एसक्यूएल में मौजूद होने पर) NHHernate की तरह करता है? – Jason

+1

नेविगेशन संपत्ति हमेशा सभी संबंधित इकाइयों को लोड करती है भले ही आप उन्हें गिनना चाहते हों। 'गणना' का समर्थन करने के लिए आपको [अतिरिक्त लोडिंग] की आवश्यकता है (http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050591-extra-lazy-loading)। –

+0

यदि हम एक ही डेटा संदर्भ पर फिर से 'लोड() 'को कॉल करते हैं, तो इसे बदलने के बजाए संग्रह में अगला पृष्ठ * जोड़ता है। क्या कोई नया डेटा संदर्भ बनाने के अलावा इसके आसपास कोई रास्ता है? – Cocowalla

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