Domanda

Ho appena iniziato pensando di usare la cache di secondo livello NHibernate in una delle mie applicazioni. Io probabilmente usare il NHibernate.Caches.SysCache.SysCacheProvider che si basa su cache di ASP.net.

L'attivazione della cache non era un problema, ma mi chiedo su come gestire la cache e. g. la rimozione di alcune entità a livello di codice dalla cache, ecc.

La mia domanda è una sorta di database di immagini. L'utente carica le immagini su un backend e può visualizzare nel frontend accedendo /ImageDb/Show?userId=someUserId

I dati non cambia molto spesso. E se cambia, gli utenti non importa un pulsante denominato "svuotare la cache" nel backend che rimuove gli oggetti memorizzati nella cache per questo utente dalla cache.

Ho trovato una soluzione online che può rimuovere tutti oggetti memorizzati nella cache da nhibernates cache di secondo livello. Ma questo è un po 'troppo forza bruta per me ... Non voglio cancellare l'intero cache per decine di utenti solo perché un utente ha cercato di cancellare la cache per i propri dati.

Quindi quello che fondamentalmente volevo fare:. Rimuovere selettivamente gli oggetti db cache da nhibernates cache di secondo livello in C #

È possibile? Immagino che dipende anche dal provider della cache. Se questo non è fattibile con il provider della cache ASP.net, io sono aperto per altri costruito nel suggerimenti / open source.

È stato utile?

Soluzione

il sessionFactory fornisce i metodi che si desidera ... dal 19,3 capitolo del riferimento NHibernate:

Per rimuovere completamente tutti gli oggetti dalla cache di sessione, chiamare ISession.Clear () Per la cache di secondo livello, ci sono metodi definiti ISessionFactory per sgomberare lo stato della cache di un esempio, tutta la classe, l'istanza di raccolta o l'intero ruolo di raccolta.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top