2009-10-01 8 views

答えて

31

同様の状況で、特定の要素をキャッシュし、アプリケーションがシャットダウンされるまでこれらの要素を起動時に一度読み込み、キャッシュに保持したいと思っています。これは読み取り専用キャッシュで、ユーザーがリストから国を選択できるように、国のリストを作成するために使用されます。

私は私のユーザークラスマップは、次のようになります

public class CountryMap : ClassMap<Country> { 
    public CountryMap() { 
     Schema("Dropdowns"); 
     Cache.ReadOnly(); 
     // Class mappings underneath 
    } 
} 

)fluentNhibernateマッピングを使用し、国にCache.readonly(と私のクラスを定義した:

public class UserMap : ClassMap<User> { 
    Id(x => x.Id).Column("UserId"); 
    Map(x => x.FirstName); 
    Map(x => x.LastName); 
    References(x => x.Country) 
     .Column("CountryId"); 
} 

私は手動で第二に使用する流暢NHibernateはを設定レベルキャッシュ。だから私は持っている私の流暢Confugurationに:

var sessionFactory = Fluently.Configure() 
    .Database (...) // set up db here 
    .Mappings(...) //set up mapping here 
    .ExposeConfiguration(c => { 
     // People advice not to use NHibernate.Cache.HashtableCacheProvider for production 
     c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider"); 
     c.SetProperty("cache.use_second_level_cache", "true"); 
     c.SetProperty("cache.use_query_cache", "true"); 
    }) 
    .BuildSessionFactory(); 

私は、SQLプロファイラで確認している、と私は、ユーザーのためのcountrysのリストを取得する場合、インクルードが一度ロードされ、私は他のすべてのリクエストの後にキャッシュヒットを取得します。素晴らしいことは、ユーザーの国名を表示するときに、キャッシュからロードされ、データベースに要求を出さないことです。私はGabriel Schenkerでこの投稿からいくつかのヒントを得た。希望は助ける?あなたがより良い/適切な方法を見つけたら、私に教えてください?ありがとう!

+0

私はあなたが成功したこともやった。私はプロファイリングのためにAyendeのNhProfを好みますが、SQLプロファイラよりもはるかに優れていますが、無料ではありません(試用版あり)、NHibernate固有のものです。 –

+0

私はNHProfのスクリーンショットを見たことがあります。我々がライブに行く前に試してみるかもしれない。 –

+0

私は今、nhprofを使用しています!それは大きな助けです! –

関連する問題