0

FluentNHibernateの第2レベルのキャッシングに頭を悩ませようとしています。これまでのところ、私は次のことを行いました。

  1. キャッシングdllへの参照を追加しました
  2. セッションファクトリを作成するときに、次を追加しました。

    c.SetProperty( "cache.provider_class"、 "NHibernate.Caches.SysCache.SysCacheProvider、NHibernate.Caches.SysCache");

    c.SetProperty( "cache.use_second_level_cache"、 "true");

    c.SetProperty( "cache.use_query_cache"、 "true");

  3. Cache.ReadWrite();を追加しました。ClassMapファイルにキャッシュしたいすべてのエンティティに対して例:

    public class CountryMap:ClassMap {public CountryMap(){Table( "Countries"); Id(x => x.CountryID); Map(x => x.CountryName); Cache.ReadWrite(); }}

ここで、マッピングにCache.ReadWrite()を持つエンティティを取得しようとすると、セッションファクトリ(シングルトン)の期間中はキャッシュされると想定しました。ただし、データベースはすべての要求でヒットするため、これは当てはまらないようです。これが私が持っているいくつかの質問です:

  • セッションのCacheModeプロパティは何をしますか?私のセッションは、Webリクエストの期間中続きます。セッションを作成するときにこれを設定する必要がありますか?その場合、何に設定する必要がありますか?
  • コミットが行われない限りキャッシュが更新されないことをどこかで読みました。データベースに情報を挿入/更新するときにのみデータをコミットします。たとえば、国のリストを含む単純なページがある場合、必要なすべてのデータを取得しますが、変更を加える必要がないため、データをコミットしません。これは、このデータがキャッシュされないことを意味しますか?これは、データベースが追加された後にのみデータがキャッシュされることを意味するため、これを間違って読んだと確信しています。

お役に立てれば幸いです。ありがとう

4

2 に答える 2

3

これは、 nhibernateを使用した第2レベルのキャッシュの非常に良い説明です。

于 2010-11-11T10:49:52.313 に答える
1

使用する第2レベルのキャッシュにはトランザクションを使用する必要があります。

于 2010-11-11T09:56:37.443 に答える