2011-04-11 15 views
6

के साथ इकाई फ्रेमवर्क कैशिंग यदि मैं रिपोजिटरी पैटर्न और एंटिटी फ्रेमवर्क का उपयोग कर रहा हूं तो कैशिंग को कार्यान्वित करना चाहता हूं, क्या मैं कैशिंग को संभालने के लिए एंटीटी फ्रेमवर्क के बाहर कुछ सरल तर्क नहीं कर सकता?रिपोजिटरी पैटर्न

उदा।

if(Cache[ProductsKey] != null) 
{ 
    return ConvertToProducts(Cache[ProductsKey]); 
} 
else 
{ 
    var products = repository.Products; 
    Cache[ProductsKey] = products; 
    return products; 
} 

ऐसा लगता है कि बहुत से लोग इसे अधिक जटिल बना रहे हैं। या ऐसा कुछ तरीके से सीमित होने जा रहा है?

+2

इकाई फ्रेमवर्क में पहले से ही पहचान मानचित्र है जो ऑब्जेक्ट की स्थानीय प्रति कैश करता है, दूसरी बात, आप उन्हें सभी ऑब्जेक्ट्स को केवल एक सूची के रूप में देख सकते हैं और उन्हें किसी भी शब्दकोश में स्टोर कर सकते हैं। आप जो भी खोज रहे हैं उसके लिए आपको अधिक विशिष्ट होना चाहिए, उदाहरण के लिए आपको कोई समस्या नहीं है जब तक कि आप आइटम प्रदर्शित करने जा रहे हों। –

+0

एक नज़र डालें [यहां] (http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-21.aspx) – Homam

+0

@Akash तो क्या वास्तव में कैशिंग करने की ज़रूरत नहीं है? – Joe

उत्तर

4

मैं अपने भंडार को साफ करने के लिए पसंद करता हूं। यदि आवश्यक हो तो मैं मेरी सेवा परत में कैशिंग लागू करना पसंद करता हूं।

तो मैं 100% अपने नमूना से सहमत हूं। आपका भंडार उत्पाद (क्वेरी चलाने से) देता है और आप अन्य परतों में कैश कर सकते हैं या नहीं कर सकते हैं।

पीएस .: मुझे लगता है कि जब आप आवश्यकता हो (सत्र शुरू) करते हैं तो आप अपना ऑब्जेक्ट संदर्भ शुरू करते हैं और सत्र समाप्त होने पर इसका निपटान करते हैं।

+0

कैशिंग इकाइयां एएसपी.Net में आलसी लोडिंग के साथ काम नहीं करती हैं क्योंकि डीबीकॉन्टेक्स्ट या ऑब्जेक्ट कॉन्टेक्स्ट के रूप में इकाई संलग्न है, जैसे ही अनुरोध समाप्त होता है। – mohas

+0

@ मोहास हां। आलसी लोडिंग एक विकल्प नहीं है यदि आप अपनी संस्थाओं को कैश करते हैं। –

4

पूरे ObjectContext को नकद करना बेहतर है जो यहां (रिपोजिटरी) है।

क्रमशः ऑब्जेक्ट को प्रारंभ और निपटाने के लिए Session_Start और Session_End का उपयोग करें।

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