【发布时间】:2017-11-20 17:16:46
【问题描述】:
我正在尝试手动清除特定区域的 2 级缓存。我找到了in answer to this question 发布的方法。虽然这正在清除我的实体,但由于某种原因,查询缓存没有被清除。这会在下次从数据库中检索实体时对每个实体进行单独的查询。当我在没有任何参数的情况下调用 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 进行缓存和验证。
【问题讨论】:
-
你有没有试过在 nhusers 群里提问 (groups.google.com/forum/#!forum/nhusers)?
-
也许你应该分享一些代码和配置来看看问题是否存在。
标签: nhibernate nhibernate-caches