我正在尝试手动清除特定区域的 2 级缓存。我找到了在回答这个问题时发布的方法。虽然这正在清除我的实体,但由于某种原因,查询缓存没有被清除。这会在下次从数据库中检索实体时对每个实体进行单独的查询。当我在没有任何参数的情况下调用 sessionFactory.EvictQueries() 时,如果确实有效。仅当我传入特定区域名称时它才不起作用。关于出了什么问题的任何想法?
代码来自上面的链接:
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 进行验证。