Как настроить области кэша в свободно используемых nhibernate и syscache2 - PullRequest
1 голос
/ 03 июня 2010

Я пытался реализовать области кэша с помощью свободного nhibernate, и я сделал следующее:

1) Настройка кэширования в Fluently.Configure ():

private static ISessionFactory CreateSessionFactory()
{
    string csStringName = Environment.MachineName;

    var nhibConfigProps = new Dictionary<string, string>();
    nhibConfigProps.Add("current_session_context_class","web");

    var cfg = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008
                      .ConnectionString(c => c.FromConnectionStringWithKey(csStringName))
                      .ShowSql()
                      .Cache(cache=>cache.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider>().UseQueryCache()))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
        .ExposeConfiguration(config => config.AddProperties(nhibConfigProps))
        .ExposeConfiguration(config=> config.EventListeners.DeleteEventListeners = new IDeleteEventListener[] {new SoftDeleteListener()})
        .ExposeConfiguration(config => new SchemaUpdate(config).Execute(false, true))
        .BuildSessionFactory();

    return cfg;
}

2) Изменил мой ClassMap, чтобы включить кэш, и установить область выбора:

 public UserMap()
 {
     Cache.ReadWrite().Region("User");
     ...
 }

Надеюсь, я сделал все правильно, но я не могу понять, где настроить приоритет и длительность кэша для каждого региона. Ты знаешь как это сделать? И если вы обнаружите недостатки в приведенном выше коде, я буду очень признателен за обратную связь.

1 Ответ

3 голосов
/ 03 июня 2010

Вам нужно будет добавить приоритет и время истечения срока действия для этого региона в конфигурации syscache в web / app.config. Посмотрите на этот превосходный пост , чтобы получить отличное объяснение использования кэша второго уровня. В примерах используется ванильный NHibernate, но вы должны понять - немного о настройке syscache находится в конце статьи.

...