2010-04-18 11 views
25

Desidero cancellare l'intera cache di secondo livello in NHibernate tramite codice. C'è un modo per fare ciò che è indipendente dal provider di cache utilizzato? (abbiamo clienti che utilizzano sia memcache che syscache all'interno della stessa applicazione).Come cancellare l'intera cache di secondo livello in NHibernate

Desideriamo cancellare l'intera cache a causa di modifiche esterne al database potrebbero essersi verificate (e non abbiamo garanzie su quali tabelle/entità sono state interessate, quindi dobbiamo assumere il peggio).

risposta

36

Questo dovrebbe fare:

sessionFactory.EvictQueries(); 
foreach (var collectionMetadata in sessionFactory.GetAllCollectionMetadata()) 
     sessionFactory.EvictCollection(collectionMetadata.Key); 
foreach (var classMetadata in sessionFactory.GetAllClassMetadata()) 
     sessionFactory.EvictEntity(classMetadata.Key); 
+0

Grazie, che ha fatto il trucco :) – Bittercoder

+0

Questo lavorano ancora nel recente (ad esempio 3.3.x.) Le emissioni di NHibernate? – DanP

+1

@DanP dovrebbe. Non sono state apportate modifiche importanti ai metadati o alla memorizzazione nella cache. –

Problemi correlati