2010-04-18 1 views
25

코드를 통해 NHibernate의 전체 2 차 캐시를 지우고 싶습니다. 이 방법은 사용중인 캐시 공급자와 독립적입니다. (우리는 같은 응용 프로그램 내에서 memcache와 syscache를 모두 사용하는 고객이 있습니다).NHibernate에서 전체 2 차 레벨 캐시를 지우는 법

데이터베이스 외부의 변경이 발생할 수 있으므로 캐시 전체를 지우고 싶습니다. (영향을받은 테이블/엔티티가 보장되지 않으므로 최악의 경우를 가정해야합니다).

답변

36

이 수행해야합니다

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

감사합니다, – Bittercoder

+0

이 여전히 최근 (예 : 3.3.x는.)에 NHibernate에의 자료를 사용할 수 있습니까 :) 트릭을 행한? – DanP

+1

@ DanP해야합니다. 메타 데이터 또는 캐싱에 큰 변화가 없었습니다. –