我正在开发一个 Web 应用程序,我想缓存以在 Web 请求中持续存在。我知道第一级缓存仅针对每个会话。我启用了二级缓存,这适用于查询。
但是,二级缓存似乎不适用于“获取”实体......因此,应用程序所做的大部分数据库工作都没有跨 Web 请求进行缓存。
这是正常/理想的行为吗?我正在查看一个特定页面,该页面对数据库进行了多次往返,尽管每个查询都很快,但如果可以缓存实体,这些似乎是不必要的。
编辑
好的,所以我启用了二级缓存,并为查询工作。我似乎无法让它为实体工作。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());
}
但是,这似乎仍然没有从二级缓存中获取。
顺便说一句,我在网上看到很多例子,Cache.ReadWrite()
但我只能看到Is
缓存助手上的一个方法,所以我正在尝试Cache.Is(c => c.ReadWrite())
——流畅的界面是否改变了?