1

流暢な nhibernate を使用してキャッシュ領域を実装しようとしてきましたが、これまでに次のことを行いました。

1) Fluently.Configure() でキャッシュをセットアップします。

private static ISessionFactory CreateSessionFactory()
{
    string csStringName = Environment.MachineName;

    var nhibConfigProps = new Dictionary<string, string>();
    nhibConfigProps.Add("current_session_context_class","web");

    var cfg = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008
                      .ConnectionString(c => c.FromConnectionStringWithKey(csStringName))
                      .ShowSql()
                      .Cache(cache=>cache.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider>().UseQueryCache()))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
        .ExposeConfiguration(config => config.AddProperties(nhibConfigProps))
        .ExposeConfiguration(config=> config.EventListeners.DeleteEventListeners = new IDeleteEventListener[] {new SoftDeleteListener()})
        .ExposeConfiguration(config => new SchemaUpdate(config).Execute(false, true))
        .BuildSessionFactory();

    return cfg;
}

2) ClassMap を変更してキャッシュを有効にし、選択した領域を設定しました。

 public UserMap()
 {
     Cache.ReadWrite().Region("User");
     ...
 }

上記を正しく行ったことを願っていますが、各リージョンの優先度とキャッシュ期間をどこで構成するかがわかりません。その方法を知っていますか?上記のコードに欠陥を見つけた場合は、フィードバックをいただければ幸いです。

4

1 に答える 1

3

web/app.config の syscache 構成で、このリージョンの優先度と有効期限を追加する必要があります。セカンド レベル キャッシュの使用に関する優れた説明については、この優れた投稿をご覧ください。例ではバニラの NHibernate を使用していますが、アイデアは理解できるはずです。

于 2010-06-03T17:23:18.207 に答える