특정 지역에 대한 레벨 2 캐시를 수동으로 지우려고합니다. 게시 된 방법이 in answer to this question 인 것을 발견했습니다. 이 작업이 엔티티를 정리하는 동안 어떤 이유로 쿼리 캐시가 지워지지 않고 있습니다. 이로 인해 엔티티가 다음에 데이터베이스에서 검색 될 때 각 엔티티에 대한 별도의 쿼리가 생성됩니다. 내가 매개 변수없이 sessionFactory.EvictQueries()를 호출하면 if가 작동합니다. 특정 지역 이름을 전달할 때만 작동하지 않습니다. 무엇이 잘못 될지에 대한 아이디어가 있습니까?Nhibernate 특정 지역에 대한 캐시 지우기
코드는 위의 링크에서입니다 :
private void ClearRegion(string regionName)
{
_sessionFactory.EvictQueries(regionName);
foreach (var collectionMetaData in _sessionFactory.GetAllCollectionMetadata().Values)
{
var collectionPersister = collectionMetaData as NHibernate.Persister.Collection.ICollectionPersister;
if (collectionPersister != null)
{
if ((collectionPersister.Cache != null) && (collectionPersister.Cache.RegionName == regionName))
{
_sessionFactory.EvictCollection(collectionPersister.Role);
}
}
}
foreach (var classMetaData in _sessionFactory.GetAllClassMetadata().Values)
{
var entityPersister = classMetaData as NHibernate.Persister.Entity.IEntityPersister;
if (entityPersister != null)
{
if ((entityPersister.Cache != null) && (entityPersister.Cache.RegionName == regionName))
{
_sessionFactory.EvictEntity(entityPersister.EntityName);
}
}
}
}
캐싱 작업과 NHProfiler를 사용하여 확인됩니다.
nhusers 그룹 (https://groups.google.com/forum/#!forum/nhusers)에서 질문 해 보셨습니까? –
문제가 있는지보기 위해 일부 코드와 설정을 공유해야 할 수도 있습니다. – Najera