Webアプリケーションを開発していますが、Webリクエスト間でキャッシュを維持したいと考えています。第1レベルのキャッシュはセッションごとのみであることを認識しています。第2レベルのキャッシュを有効にしており、これはクエリに対して機能しています。
ただし、第2レベルのキャッシュはエンティティを「取得」するためには機能しないようです...したがって、アプリケーションが実行するDB作業のほとんどは、Webリクエスト間でキャッシュされていません。
これは正常な/望ましい動作ですか?データベースへのラウンドトリップが多い特定のページを確認していますが、各クエリは高速ですが、エンティティをキャッシュできれば、これらは不要のようです。
編集
さて、私は第2レベルのキャッシュを有効にして、クエリを処理しています。私はそれをエンティティに対して機能させることができないようです。私がCache.Is(c => c.ReadWrite())
テストしているメインエンティティには(流暢なnhibernate)があります。しかし、いや、それでも毎回DBにヒットします。何か案は?
編集
私は次のようなトランザクションを使用してみました:
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.Is(c => c.ReadWrite())