我们在 nHibernate 实现中设置了许多缓存区域。为了避免负载平衡 Web 服务器出现问题,我想有效地禁用编辑缓存数据的页面上的缓存。我可以编写一个方法来轻松清除所有查询缓存、类缓存和实体缓存。
但我真正想要的是按区域清除缓存。 sessionFactory.EvictQueries() 将采用区域参数,但 Evict() 和 EvictCollection() 则不会。我真的不想在这里丢弃整个缓存,也不想维护某种笨拙的字典,将类型与其缓存区域相关联。 nHibernate 是否有办法询问实体或集合的缓存设置是什么?
thanks
我刚刚做了同样的事情。为了大家的利益,这是我构造的方法:
public void ClearCache(string regionName)
{
// Use your favourite IOC to get to the session factory
var sessionFactory = ObjectFactory.GetInstance<ISessionFactory>();
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);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)