3

NHibernate 3.2にアップグレードする前に、FluentNHibernateに次のコードを使用しました。

OracleClientConfiguration configurer = (OracleClientConfiguration.Oracle10.ShowSql().ConnectionString(c =>
                         c.FromConnectionStringWithKey(ConnectionString.Development))
                         .DefaultSchema("MySchema")
                         .UseReflectionOptimizer()
          /* Here --> */ .Cache(c => 
                                 c.ProviderClass<SysCacheProvider>()
                                 .UseQueryCache()));

ただし、.Cache()拡張メソッドはNHibernate3.2では見つかりません。

キャッシュプロバイダーを設定するにはどうすればよいですか?

編集:私も試しました:

        .ExposeConfiguration(configuration =>
        {
            configuration.SetProperty(Environment.UseQueryCache, "true");
            configuration.SetProperty(Environment.CacheProvider, "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache2");
        });
4

2 に答える 2

6

これは、SysCacheプロバイダーを使用した私の構成からの抜粋です。

var configuration = new Configuration()
    .Cache(x => x.UseQueryCache = true)
configuration.SessionFactory()
    .Caching.Through<SysCacheProvider>().WithDefaultExpiration(60)
于 2012-04-02T19:31:52.773 に答える
0

http://www.markhneedham.com/blog/2010/06/16/fluent-nhibernate-and-the-2nd-level-cache/&https://web.archive.org/web/20110514214657/httpを参照して ください 。 //blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

よくあるエラー(私にも起こりました!)は、データベースにエンティティ/アグリゲートを追加または変更するときに、トランザクションをコミットまたは省略するのを忘れることです。別のセッションからエンティティ/アグリゲートにアクセスする場合、キャッシュされたインスタンスを提供するために第2レベルのキャッシュが準備されず、NHibernateが(データベースへの予期しないラウンドトリップ)を実行します。

私は同じ問題を抱えており、何度もグーグルで検索しましたが、ついにこれを見ました。悪いニュースは、trasactionを使用しようとしましたが、2レベルのキャッシュを開くことができませんでした。

于 2013-06-01T01:08:38.123 に答える