إزالة الكائنات من ذاكرة التخزين المؤقت من المستوى الثاني من Nhibernate
-
21-09-2019 - |
سؤال
لقد بدأت للتو التفكير في استخدام ذاكرة التخزين المؤقت من المستوى الثاني من Nhibernate في أحد تطبيقي. ربما سأستخدم NHibernate.Caches.SysCache.SysCacheProvider
الذي يعتمد على ذاكرة التخزين المؤقت ASP.NET.
لم يكن تمكين ذاكرة التخزين المؤقت مشكلة ، لكنني أتساءل عن كيفية إدارة ذاكرة التخزين المؤقت ، على سبيل المثال ، إزالة بعض الكيانات من ذاكرة التخزين المؤقت وما إلى ذلك.
طلبي هو نوع من قاعدة بيانات الصور. يقوم المستخدم بتحميل الصور عبر الواجهة الخلفية ويمكنه مشاهدتها في الواجهة الأمامية عن طريق الوصول إليها /ImageDb/Show?userId=someUserId
لا تتغير البيانات كثيرًا. وإذا تغير ، فلن يهم المستخدمون زرًا يسمى "مسح ذاكرة التخزين المؤقت" في الواجهة الخلفية التي تزيل الكائنات المخزنة مؤقتًا هذا المستخدم من ذاكرة التخزين المؤقت.
لقد وجدت حلًا عبر الإنترنت يمكنه الإزالة الكل كائنات مخزنة مؤقتًا من ذاكرة التخزين المؤقت من المستوى الثاني. لكن هذه قوة وحشية للغاية بالنسبة لي ... لا أريد مسح ذاكرة التخزين المؤقت بالكامل لعشرات المستخدمين لمجرد أن أحد المستخدمين حاول مسح ذاكرة التخزين المؤقت لبياناته الخاصة.
لذا فإن ما أردت القيام به بشكل أساسي: إزالة كائنات DB المخزنة مؤقتًا من ذاكرة التخزين المؤقت من المستوى الثاني في NHibernates في C#.
هل هذا ممكن؟ أعتقد أنه يعتمد أيضًا على مزود ذاكرة التخزين المؤقت. إذا لم يكن هذا قابلاً للتنفيذ مع مزود ذاكرة التخزين المؤقت ASP.NET ، فأنا منفتح على اقتراحات أخرى في المصدر المفتوح.
المحلول
يوفر SessionFactory الطرق التي تريدها ... من 19.3 الفصل من مرجع Nhibernate:
لطرد جميع الكائنات من ذاكرة التخزين المؤقت للجلسة ، call 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