Выселить элементы кэша 2-го уровня Syscache/Nhibernate

Я использую NHibernate 3.3 с кешем 2-го уровня Syscache и пытаюсь удалить объект из кеша 2-го уровня, но, похоже, он не работает.

Я использую этот код на основе других примеров:

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); кажется, не имеет никакого эффекта.

Мой пример использования: я работаю с отсоединенными объектами, и когда другое приложение вносит изменения в базу данных, мне нужно удалить эти элементы из кэша 2-го уровня, чтобы поддерживать его в синхронизации.

1 ответ

Очистить 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);
    }
Другие вопросы по тегам