流暢なnhibernateで設定する方法とどのエンティティをキャッシュするかの例はありますか?流暢なマッピングと自動マッピングの両方を使用していますか?Fluent Nhibernateのエンティティとリレーションシップのキャッシュを設定しますか?
エンティティリレーションシップでも、1対多と多対多の両方で同じですか?
流暢なnhibernateで設定する方法とどのエンティティをキャッシュするかの例はありますか?流暢なマッピングと自動マッピングの両方を使用していますか?Fluent Nhibernateのエンティティとリレーションシップのキャッシュを設定しますか?
エンティティリレーションシップでも、1対多と多対多の両方で同じですか?
同様の状況で、特定の要素をキャッシュし、アプリケーションがシャットダウンされるまでこれらの要素を起動時に一度読み込み、キャッシュに保持したいと思っています。これは読み取り専用キャッシュで、ユーザーがリストから国を選択できるように、国のリストを作成するために使用されます。
私は私のユーザークラスマップは、次のようになります
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でこの投稿からいくつかのヒントを得た。希望は助ける?あなたがより良い/適切な方法を見つけたら、私に教えてください?ありがとう!
私はあなたが成功したこともやった。私はプロファイリングのためにAyendeのNhProfを好みますが、SQLプロファイラよりもはるかに優れていますが、無料ではありません(試用版あり)、NHibernate固有のものです。 –
私はNHProfのスクリーンショットを見たことがあります。我々がライブに行く前に試してみるかもしれない。 –
私は今、nhprofを使用しています!それは大きな助けです! –