2009-04-12 22 views
12

के माध्यम से पेजर लागू करना मैं एक एप्लीकेशन विकसित कर रहा हूं जिसमें डब्ल्यूसीएफ सेवा और उसके एएसपी.नेट एमवीसी क्लाइंट शामिल हैं। एएसपी.नेट एमवीसी वेबसाइट वस्तुओं का एक ग्रिड प्रदर्शित करना चाहिए - कहें, उत्पादों। ये उत्पाद डेटाबेस में संग्रहीत हैं जो डब्ल्यूसीएफ सेवा के माध्यम से सुलभ है। तो कहीं एक एमवीसी नियंत्रक के अंदर मैं डब्ल्यूसीएफ सेवा की विधि को कॉल करता हूं जो मुझे उन उत्पादों की एक श्रृंखला देता है जिन्हें मुझे प्रदर्शित करने की आवश्यकता है।डब्ल्यूसीएफ सेवा

तो मेरा प्रश्न क्या है? मैं अपने उत्पादों के ग्रिड के लिए पेजर कार्यक्षमता को कार्यान्वित करना चाहता हूं, क्योंकि यह संभव है कि बहुत सारे उत्पाद होंगे।

  1. मेरे नियंत्रक उत्पादों की पूरी सूची प्राप्त कर सकते हैं और बस में स्मृति पेजिंग
  2. WCF सभी उत्पादों का चयन और उन्हें अपने कैश में कहीं स्टोर कर सकते हैं करते हैं, तो पारित: तो वहाँ ऐसा करने के लिए कई तरीके हैं अनुरोधित पृष्ठ संख्या के अनुसार, नियंत्रक को केवल उनमें से एक हिस्सा।
  3. डब्ल्यूसीएफ अनुरोधित पृष्ठ संख्या के अनुसार डेटाबेस से उत्पादों का केवल एक हिस्सा चुन सकता है।
  4. डब्ल्यूसीएफ नियंत्रक के लिए IQueryable वापस कर सकता है, और उसके बाद नियंत्रक जब भी चाहें चुनने का चयन करेगा।

जहां तक ​​मैं समझता हूं (और यदि यह सच नहीं है तो मुझे सही करें), पहला विकल्प बेकार है, इसलिए मुझे दूसरों के बीच चयन करना होगा।

दूसरा विकल्प मेरे सर्वर की स्मृति को बर्बाद कर देता है।

तीसरा विकल्प ठीक है, लेकिन यह डब्ल्यूसीएफ पक्ष पर पेजिंग को लागू करने के लिए थोड़ा बदसूरत लगता है।

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

तो क्या आप कृपया इसे लागू करने के लिए सही तरीका चुनने में मेरी मदद कर सकते हैं?

उत्तर

15

आपकी बैक-एंड डेटाबेस परत कैसी दिखती है? यदि आप LINQ (-to-SQL या -to-Entities) का उपयोग कर रहे हैं, तो आप पेज आकार और पेज नंबर निर्दिष्ट करके डब्ल्यूसीएफ के माध्यम से पेजिंग को कार्यान्वित कर सकते हैं, और फिर LINQ के "Skip" और "Take" ऑपरेटरों को लाने के लिए उपयोग करें पृष्ठ का अनुरोध किया - मोटे तौर पर की तरह कुछ:

[ServiceContract] 
public interface IFetchData 
{ 
    [OperationContract] 
    public List<Data> GetData(int pageSize, int pageNumber) 
} 

और उसके बाद यह कुछ इस तरह (सरलीकृत) को लागू:

public class FetchDataService : IFetchData 
{ 
    public List<Data> GetData(int pageSize, int pageNumber) 
    { 
     var query = yourContext.DataTable 
        .Skip((pageNumber - 1) * pageSize) 
        .Take(pageSize); 

     return query.ToList(); 
    } 
} 

है कि आप के लिए उपयोगी हो सकते हैं ??

मार्क

+0

हां, मैं LINQ-to-SQL का उपयोग कर रहा हूं। तो आप जो पेशकश कर रहे हैं वह वास्तव में मेरा तीसरा विकल्प है। खैर, मैं शायद इसके लिए जाऊंगा। मैंने कुछ प्रकार के आलसी निष्पादन के बारे में सोचा, जब डब्ल्यूसीएफ सेवाओं ने वास्तव में डीबी से कुछ भी चुने बिना क्लाइंट को IQueryable पास किया। लेकिन मैं यह नहीं समझ सकता कि इसे कैसे करें –

+0

ठीक है, अभी, वर्तमान पेशकशों के साथ, मुझे लगता है कि IQueryable के आसपास गुजरना मुश्किल हो सकता है। लेकिन अगर आप "आरआईए सर्विसेज" पर MIX'09 वीडियो देखते हैं - यह वही है जो एमएस अब सिल्वरलाइट 3 के लिए बना रहा है - जो शायद आपकी सभी समस्याओं को हल करेगा :-) –

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