Как настроить кэш второго уровня NHibernate в NHibernate> = 3.2? - PullRequest
3 голосов
/ 02 апреля 2012

Перед обновлением до NHibernate 3.2 я использовал следующий код для Fluent NHibernate:

OracleClientConfiguration configurer = (OracleClientConfiguration.Oracle10.ShowSql().ConnectionString(c =>
                         c.FromConnectionStringWithKey(ConnectionString.Development))
                         .DefaultSchema("MySchema")
                         .UseReflectionOptimizer()
          /* Here --> */ .Cache(c => 
                                 c.ProviderClass<SysCacheProvider>()
                                 .UseQueryCache()));

Однако метод расширения .Cache() больше не встречается в NHibernate 3.2.

Как мне настроить мой поставщик кеша?

Редактировать: я тоже пробовал:

        .ExposeConfiguration(configuration =>
        {
            configuration.SetProperty(Environment.UseQueryCache, "true");
            configuration.SetProperty(Environment.CacheProvider, "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache2");
        });

Ответы [ 2 ]

6 голосов
/ 02 апреля 2012

Это выдержка из моей конфигурации с использованием поставщика SysCache.

var configuration = new Configuration()
    .Cache(x => x.UseQueryCache = true)
configuration.SessionFactory()
    .Caching.Through<SysCacheProvider>().WithDefaultExpiration(60)
0 голосов
/ 01 июня 2013

см. http://www.markhneedham.com/blog/2010/06/16/fluent-nhibernate-and-the-2nd-level-cache/ & https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

Распространенная ошибка (это также случилось со мной!) - забыть зафиксировать или пропустить транзакцию при добавлении или изменении объекта/ агрегировать в базу данных.Если мы теперь получим доступ к объекту / агрегату из другого сеанса, то кэш 2-го уровня не будет готов предоставить нам кэшированные экземпляры, и NHibernate совершит (неожиданный возврат в базу данных).

У меня естьта же проблема, и гуглил по ней много раз, наконец я это увидел.Плохая новость в том, что я попытался использовать trasaction и все еще не смог открыть кэш 2-го уровня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...