我正在使用带有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);似乎没有任何效果。
我的用例:我正在使用分离的对象,当另一个应用程序对数据库进行更改时,我需要将这些项从二级缓存中逐出以保持同步。
发布于 2015-03-21 00:31:20
清除两级缓存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);
}https://stackoverflow.com/questions/29166885
复制相似问题