Кэширование объектов NHibernate между сеансами с использованием SysCache

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

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

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

Изменить

Хорошо, у меня включен кеш второго уровня, и работает по запросам. Я просто не могу заставить его работать для сущностей. У меня есть Cache.Is (c => c.ReadWrite ()) (свободный nhibernate) на моем основном объекте, который я тестирую. Но нет, он все равно каждый раз попадает в БД. Есть идеи?

Изменить

Я пробовал использовать такие транзакции:

public override Accommodation Get(int id) 
{ 
    using (var tx = Session.BeginTransaction()) 
    { 
        var accomm = Session.Get<Accommodation>(id); 
        tx.Commit(); 
        return accomm; 
    } 
} 

У меня такое отображение (и вы можете видеть, что у нас неприятная схема):

public void Override(AutoMapping<Core.Entities.Itinerary.Accommodation.Accommodation> mapping)
{
    mapping.HasManyToMany(x => x.Features).Table("AccommodationLinkFeatureType").ChildKeyColumn("FeatureTypeId").NotFound.Ignore();
    mapping.HasManyToMany(x => x.SimilarAccommodation).Table("AccommodationLinkSimilarAccommodation").ChildKeyColumn("SimilarAccommodationId").NotFound.Ignore();
    mapping.HasMany(x => x.TourItinerary).Table("AccommodationTourItinerary");
    mapping.HasOne(x => x.Images).ForeignKey("AccommodationId").Cascade.All().Not.LazyLoad();
    mapping.References(x => x.CollectionType).NotFound.Ignore().Not.LazyLoad();
    mapping.References(x => x.AccommodationUnitType).NotFound.Ignore().Not.LazyLoad();
    Cache.Is(c => c.ReadWrite());
}

Однако это все еще не похоже выборка из кэша 2-го уровня.

Между прочим, я вижу много примеров в Интернете с использованием Cache.ReadWrite () , но я могу видеть только метод Is в помощнике Cache, поэтому я пытаюсь Cache.Is (c => c.ReadWrite ()) - изменился ли свободный интерфейс?

8
задан Chris Haines 14 April 2014 в 16:14
поделиться