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