Frage

Ich habe gerade angefangen darüber nachzudenken, die NHibernate Second Level Cache in einem meiner Apps verwenden. Ich würde wahrscheinlich die NHibernate.Caches.SysCache.SysCacheProvider verwenden, die auf ASP.net Cache beruht.

den Cache Aktivieren war kein Problem, aber ich frage mich, wie das Cache-e zu verwalten. G. programmatisch Entfernen bestimmte Einheiten aus dem Cache etc.

Meine Anwendung ist eine Art Bilddatenbank. Die Börse Bilder über ein Backend und im Frontend anzeigen lassen, indem /ImageDb/Show?userId=someUserId Zugriff

Die Daten nicht oft ändern. Und wenn sie sich ändert, würden die Benutzer nicht auf eine Schaltfläche Rolle namens „my Cache löschen“ im Backend, die im Cache gespeicherten Objekte für entfernt dieser Benutzer aus dem Cache.

ich eine Lösung gefunden online, die entfernen alle im Cache gespeicherten Objekte aus nhibernates Second Level Cache. Aber das ist ein bisschen zu Brute-Force für mich ... Ich habe nicht den ganzen Cache für Dutzende von Benutzern nur löschen will, weil ein Benutzer versucht, den Cache für seine eigenen Daten zu löschen.

Also, was ich im Grunde tun wollte. Selektiv zwischengespeichert db Objekte aus nhibernates zweiten Ebene entfernen Cache in C #

Ist das möglich? Ich denke, es hängt auch von den Cache-Provider. Ist dies nicht machbar mit den Cache-Provider ASP.net ist, bin ich offen für andere integrierte / Open-Source-Vorschläge.

War es hilfreich?

Lösung

stellt die session die Methoden, die Sie wollen ... von den 19.3 Kapiteln der NHibernate Referenz :

Um das Gerät vollständig evict alle Objekte aus der Sitzung Cache, rufen ISession.Clear () Für den zweiten Level-Cache gibt es auf ISessionFactory definierten Methoden für die im Cache gespeicherten Zustand eines evicting Beispiel ganz Klasse, Sammlung Instanz oder ganz Sammlung Rolle.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top