Настроить кэширование на объектах и отношениях в Быстром Nhibernate?

Несколько комментариев к этому...

Первый, в то время как нет никаких шаблонов по сути, пишущий синтаксический анализатор, по существу механическое осуществление, так как дали грамматика, синтаксический анализатор может быть легко сгенерирован. Инструменты как Бизон и ANTLR приходят на ум.

Однако парсеры-генераторы обычно являются излишеством для командной строки. Таким образом, обычный шаблон должен записать тот самостоятельно (как другие продемонстрировали), несколько раз, пока Вы не устаете от контакта с утомительной деталью и находите, что библиотека делает это для Вас.

я записал один для C++, который сохраняет набор усилия, что getopt передает и делает хорошее использование шаблонов: TCLAP

27
задан Dio F 7 August 2012 в 07:38
поделиться

1 ответ

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

Я использовал fluentNhibernate Mappings и определил Country my class с помощью Cache.readonly ()

public class CountryMap : ClassMap<Country> {
    public CountryMap() { 
         Schema("Dropdowns");
         Cache.ReadOnly();
         // Class mappings underneath 
    }
}

Моя карта классов пользователей выглядит так:

public class UserMap : ClassMap<User> {
    Id(x => x.Id).Column("UserId");
    Map(x => x.FirstName);
    Map(x => x.LastName);
    References(x => x.Country)
      .Column("CountryId");
}

Я вручную настраиваю Fluent Nhibernate для использования кеша второго уровня. Итак, в моем беглом Confuguration у меня есть:

var sessionFactory = Fluently.Configure()
    .Database (...) // set up db here
    .Mappings(...)  //set up mapping here
    .ExposeConfiguration(c => {
        // People advice not to use NHibernate.Cache.HashtableCacheProvider for production
        c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
        c.SetProperty("cache.use_second_level_cache", "true");
        c.SetProperty("cache.use_query_cache", "true");
    })
    .BuildSessionFactory();

Я проверил профилировщик SQL, и когда я получаю список стран для пользователя, они загружаются один раз, и я получаю обращения к кешу после каждого другого запроса. Приятно то, что при отображении названия страны пользователя оно загружается из кеша, и не делает запросов к базе данных. Я получил несколько советов из этой публикации Габриэля Шенкера . Надеюсь, это поможет? Если вы нашли лучший / правильный способ, дайте мне знать? Спасибо!

31
ответ дан 28 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: