oturumları arasında oturumları önbelleğe alma Bir web uygulaması geliştiriyorum ve web isteklerine devam etmek için önbelleğe almak istiyorum. İlk seviye önbelleğinin yalnızca oturum başına olduğunu biliyorum. İkinci düzey önbelleğe alma özelliğini etkinleştirdim ve bu, sorgular için çalışıyor.NHibernate SysCache
Ancak, ikinci düzey önbellek "alma" varlıkları için çalışıyor gibi görünmüyor ... bu nedenle, DB çalışmalarının çoğu, web istekleri arasında önbelleğe alınmıyor.
Bu normal/istenen davranış mı? Her sorgu hızlı olsa da, varlıklar önbelleğe alınabiliyorsa bu gereksiz görünüyor, ancak veritabanına çok sayıda gidiş dönüş yapan belirli bir sayfayı inceliyorum.
Düzenleme
Ben ikinci seviye önbellek etkin böylece Tamam, ve sorgular için çalışıyor. Sadece varlıklar için çalışmayı başaramıyorum. Test ettiğim ana varlığım üzerinde Cache.Is(c => c.ReadWrite())
(akıcı nhibernate) var. Ama hayır, hala her defasında DB'ye vuruyor. Herhangi bir fikir?
Düzenleme
ben şöyle kullanarak işlemleri denedim:
public override Accommodation Get(int id)
{
using (var tx = Session.BeginTransaction())
{
var accomm = Session.Get<Accommodation>(id);
tx.Commit();
return accomm;
}
}
Benim haritalama (ve biz kötü bir şema var görebilir) şekildedir:
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());
}
Ancak, bu hala 2. seviye önbellekten alınmıyor gibi görünüyor.
arada, bir çok örnek çevrimiçi Cache.ReadWrite()
kullanarak ama sadece Önbellek yardımcı bir Is
yöntemi görebilirsiniz bkz yüzden Cache.Is(c => c.ReadWrite())
çalışıyorum - akıcı arayüz değişti?
kolay yolu bir web oturumu içinde senin NHibernate oturumu tasarrufu olacağını, ama bu tavsiye etmiyorum: Muhtemelen 2. düzey önbelleğe düzeltmek gerekir P - Bu yayını okumak vardır: http: // blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx?Bağlantı için – rsenna
+1, ancak benim düzenleme –
kod + eşleme? – Paco