Я разрабатываю веб-приложение и хочу, чтобы кеширование сохранялось во всех веб-запросах. Я знаю, что кеш первого уровня предназначен только для каждого сеанса. У меня включено кэширование второго уровня, и это работает для запросов.
Однако кеш второго уровня, похоже, не работает для "получения" сущностей ... поэтому большая часть работы с БД, которую выполняет приложение, не кэшируется. через веб-запросы.
Это нормальное / желательное поведение? Я просматриваю одну конкретную страницу, которая делает много обращений к базе данных, хотя каждый запрос выполняется быстро, они кажутся ненужными, если объекты можно кэшировать.
Изменить
Хорошо, у меня включен кеш второго уровня, и работает по запросам. Я просто не могу заставить его работать для сущностей. У меня есть 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 ())
- изменился ли свободный интерфейс?