首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐出二级缓存项Syscache/Nhibernate

逐出二级缓存项Syscache/Nhibernate
EN

Stack Overflow用户
提问于 2015-03-20 20:47:42
回答 1查看 233关注 0票数 0

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

我基于其他示例使用此代码:

代码语言:javascript
复制
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);似乎没有任何效果。

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-21 00:31:20

清除两级缓存nHibernate (此方法适用于我):

代码语言:javascript
复制
 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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29166885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档