Ted*_*Ted 5 nhibernate nhibernate-caches
我们在nHibernate实现中设置了许多缓存区域.为了避免负载均衡的Web服务器出现问题,我希望有效地禁用编辑缓存数据的页面上的缓存.我可以写一个方法来清除我的所有查询缓存,我的类缓存和我的实体缓存很容易.
但我真正想要的是按区域清除缓存.sessionFactory.EvictQueries()将采用region参数,但Evict()和EvictCollection()不会.我真的不想在这里丢弃整个缓存,也不想维护某种笨拙的字典,将类型与缓存区域相关联.nHibernate是否有办法向实体或集合询问其缓存设置是什么?
谢谢
我刚刚做了同样的事情。为了大家的利益,这是我构建的方法:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,看来我已经回答了我自己的问题。当您提取 nHibernate 元数据时返回的默认接口不提供有关缓存的信息,但是如果您深入研究它的实现,它会提供。有点笨拙,但它可以完成工作。
| 归档时间: |
|
| 查看次数: |
1354 次 |
| 最近记录: |