Evict二级缓存项Syscache / Nhibernate

时间:2015-03-20 12:47:42

标签: c# caching nhibernate evict syscache

我正在使用带有Syscache二级缓存的NHibernate 3.3,我试图从二级缓存中驱逐一个对象,但它似乎不起作用。

我正在使用基于其他示例的代码:

var CollectionCache = NHibernateSessionFactory.Instance.GetAllCollectionMetadata();
var ClassCache = NhibernateSessionFactory.Instance.GetAllClassMetadata();
NhibernateSessionFactory.Instance.EvictQueries();
foreach (var collectionMetadata in NhibernateSessionFactory.Instance.GetAllCollectionMetadata())
         NhibernateSessionFactory.Instance.EvictCollection(collectionMetadata.Key);
foreach (var classMetadata in NhibernateSessionFactory.Instance.GetAllClassMetadata())
         NhibernateSessionFactory.Instance.EvictEntity(classMetadata.Key);

驱逐后,CollectionCache和ClassCache仍然具有相同数量的项目。

此外,NhibernateSessionFactory.Instance.Evict(typeof(someObject), SomeObjectId);似乎没有任何效果。

我的用例:我正在使用分离的对象,当另一个应用程序对数据库进行更改时,我需要从二级缓存中逐出这些项目以保持同步。

1 个答案:

答案 0 :(得分:0)

清除2级缓存nHibernate(这种方法对我有用):

 private void ClearCache()
    {
        _repositoryFactory.GetSession().Clear();
        var sf = _repositoryFactory.GetSession().SessionFactory;
        sf.EvictQueries();
        foreach (var collectionMetadata in sf.GetAllCollectionMetadata())
            sf.EvictCollection(collectionMetadata.Key);
        foreach (var classMetadata in sf.GetAllClassMetadata())
            sf.EvictEntity(classMetadata.Key);
    }