2009-11-22 13 views
24

मैंने अपने ऐप्स में से एक में NHibernate द्वितीय स्तर कैश का उपयोग करने के बारे में सोचना शुरू कर दिया। मैं शायद NHibernate.Caches.SysCache.SysCacheProvider का उपयोग करूंगा जो एएसपीनेट कैश पर निर्भर करता है।NHibernate द्वितीय स्तर कैश से वस्तुओं को हटाने

कैश को सक्षम करना कोई समस्या नहीं थी, लेकिन मैं कैश ई को प्रबंधित करने के तरीके पर सोच रहा हूं। जी। प्रोग्रामिंग रूप से कैश आदि से कुछ इकाइयों को हटा रहा है

मेरा एप्लिकेशन किसी प्रकार का छवि डेटाबेस है। उपयोगकर्ता बैकएंड पर छवियों को अपलोड करता है और इसे /ImageDb/Show?userId=someUserId

तक पहुंचकर अग्रभाग में देख सकता है। डेटा अक्सर नहीं बदलता है। और यदि यह बदलता है, तो उपयोगकर्ता बैकएंड में "मेरे कैश साफ़ करें" नामक एक बटन से कोई फर्क नहीं पड़ता है, जो कैश से इस उपयोगकर्ता के लिए कैश किए गए ऑब्जेक्ट को हटा देता है।

मुझे एक समाधान ऑनलाइन मिला जो सभी कैश किए गए ऑब्जेक्ट्स को दूसरे स्तर के कैश से रोकता है। लेकिन यह मेरे लिए थोड़ा सा बल है ... मैं दर्जनों उपयोगकर्ताओं के लिए पूरे कैश को साफ़ नहीं करना चाहता क्योंकि सिर्फ एक उपयोगकर्ता ने अपने डेटा के लिए कैश साफ़ करने का प्रयास किया था।

तो मैं मूल रूप से क्या करना चाहता था: चयनित रूप से कैश किए गए डीबी ऑब्जेक्ट्स को C# में दूसरे स्तर के कैश से रोकता है।

क्या यह संभव है? मुझे लगता है कि यह कैश प्रदाता पर भी निर्भर करता है। यदि यह एएसपीनेट कैश प्रदाता के साथ काम करने योग्य नहीं है, तो मैं अन्य निर्मित/ओपन सोर्स सुझावों के लिए खुला हूं।

+0

मुझे पता है कि यह शायद अब प्रासंगिक नहीं है लेकिन ध्यान दें कि आपकी यूआरआई योजना गलत है। यह उपयोगकर्ता/[आईडी]/छवि डीबी/शो –

+0

@the_drow - जब तक ऐप को छवि डीबी कहा जाता है :) आप अभी भी अधिकतर सही हैं, बस छवि डीबी को/छवियों में बदलना है या कुछ –

+0

@LukeSchafer: मैंने केवल ImageDb लिखा है क्योंकि ओपी इसका इस्तेमाल करता है। –

उत्तर

40

sessionFactory तरीकों आप चाहते हैं ... 19.3 chapter of the NHibernate reference से प्रदान करता है:

पूरी तरह से, सत्र कैश से सभी वस्तुओं को बेदखल करने के लिए ISession.Clear (कॉल) दूसरे स्तर कैश के लिए, वहाँ तरीके हैं उदाहरण, संपूर्ण कक्षा, संग्रह उदाहरण या संपूर्ण संग्रह भूमिका के कैश किए गए राज्य को बेदखल करने के लिए ISessionFactory पर परिभाषित किया गया है।

sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat 
sessionFactory.Evict(typeof(Cat)); //evict all Cats 
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens 
sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections 
+68

गरीब बिल्ली के बच्चे ... –

+6

पहले पैरामीटर में भूमिका का नाम पूर्ण नामस्थान + क्लासनाम + Propertiesyname है जो आपको चाहिए बेदख़ल करना। आप sessionFactory.GetAllCollectionMetaData() कुंजी को कॉल करके कैश में सबकुछ देख सकते हैं। –

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