क्वेरी करने मैं यहाँ सेकैसे IQueryable <T> वापस जाने के लिए आगे
https://github.com/TroyGoode/PagedList
जो इस प्रयोग नमूना MyProductDataSource.FindAllProducts की
var products = MyProductDataSource.FindAllProducts(); //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?
var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
var onePageOfProducts = products.ToPagedList(pageNumber, 25); // will only contain 25 products max because of the pageSize
ठेठ implmentations है PagedList.Mvc पुस्तकालय कोशिश कर रहा हूँ के लिए ();
public IQuerable<T> MyProductDataSource.FindAllProducts()
{
using (var ctx = new MyCtx())
{
return ctx.MyList().Where(....);
}
}
जो निश्चित रूप से InvalidOperationException() है और DBContext पहले से ही संदेश निपटान किया जाता है
कैसे IQueryable जो मुद्दों के बिना यहां इस्तेमाल किया जा सकता वापस जाने के लिए पर सर्वोत्तम प्रथाओं के लिए खोज रहे की तर्ज पर कर रहे हैं?
using (var ctx = new MyCtx())
{
var products = MyProductDataSource.FindAllProducts(ctx);
var pageNumber = page ?? 1;
var onePageOfProducts = products.ToPagedList(pageNumber, 25);
}
यह एक सामान्य कार्यान्वयन नहीं है। आम तौर पर आप एक रेपॉजिटरी क्लास में एक संदर्भ इंजेक्ट करते हैं जिसका अर्थ है कि आप विधि स्तर पर निपटान नहीं करते हैं। –
@WiktorZychla मैं असहमत हूं। दोनों उपयोगी कार्यान्वयन हैं। जब विधि को स्थानीय रूप से संदर्भ को पार करना संभव हो, तो यह करने के लिए एक स्वीकार्य बात है, लेकिन जब क्वेरी की पीढ़ी उस विधि के दायरे से बाहर हो जाती है जो कि कोई विकल्प नहीं है, ऐसे मामलों में आपको संदर्भ के दायरे को समायोजित करने की आवश्यकता है कि, जहां भी यह है, यह उस क्वेरी के जीवनकाल को शामिल करता है। प्रोग्रामर को यह समझने में सक्षम होना चाहिए कि किसी भी दिए गए प्रश्न का जीवनकाल क्या है और इस संदर्भ को दायरा दें कि यह उसी "स्तर" पर है, और नहीं, कम नहीं। – Servy
@ सर्वी: सच है लेकिन ज्यादातर मामलों में आपका संदर्भ जीवनकाल "प्रति-http-context" है। ध्यान दें कि वह एएसपीनेट के साथ सवाल टैग करता है।आप जो कहते हैं वह एक सामान्य सिद्धांत का एक टुकड़ा है, उसे अपने विशिष्ट, एएसपीनेट परिदृश्य के लिए एक सटीक मार्गदर्शन की आवश्यकता है। –