2012-07-30 70 views
2

我一直在使用流利和syscache2的WCF服務。我幾乎讀過關於我目前困境的每篇文章;我沒有運氣。流利的NHibernate的Syscache2緩存過期

我想設置我的二級緩存到期時間。無論我設置的值是什麼似乎都被忽略,並且默認值5分鐘用於使緩存過期。

流利的配置:

注:contextClass只是傳遞到配置描述符類固定值。

var cfg = Fluently.Configure() 
       .Database(
        MsSqlConfiguration.MsSql2008       
        .ConnectionString(c => c.Is(connectionString)) 
        .ShowSql() 
        ) 
       .Diagnostics(d => d.Enable())                
       .Cache(c => c         
          .UseQueryCache()   
          .ProviderClass(typeof(NHibernate.Caches.SysCache2.SysCacheProvider).AssemblyQualifiedName))      
       .Mappings(m => m 
        .FluentMappings 
        .AddFromAssembly(assembly)) 
       .ExposeConfiguration(x => 
       { 
        x.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, contextClass.Id); 
        x.SetProperty(NHibernate.Cfg.Environment.PrepareSql, contextClass.PrepareSql); //set prepare_sql true/false 
        x.SetProperty(NHibernate.Cfg.Environment.CacheDefaultExpiration, contextClass.ExpireL2Cache); //set default expiration in seconds 
       }); 

我也有設置如下app.config文件:

<configSections> 
    <section name="syscache" type="NHibernate.Caches.SysCache2.SysCacheSection, NHibernate.Caches.SysCache2"/> 
</configSections> 

<syscache> 
    <cache expiration="600" priority="5" /> 
</syscache> 

有這有那的區域使用一個syscache部分在app.config的一個變種,但沒有奏效無論是。

任何人有任何意見建議?

感謝

回答

4

我一直使用這個沒有問題:

.ExposeConfiguration (cfg => { 
    cfg.Properties.Add ("expiration", "900"); 
}) 

不知道Properties.Add任何行爲不同於的SetProperty叫你正在使用雖然。

好像如果你正在使用NHibernate的新版本,你可以在NHibernate.Cfg命名空間中的新的擴展方法爲這個瘦以及(這將取代流利整個.Cache調用)

.ExposeConfiguration (cfg => { 
    cfg.SessionFactory().Caching.Through<SysCacheProvider>().WithDefaultExpiration(900); 
}) 

做一些讀我發現this

cache.default_expiration或到期(的Int32):自NH的Contrib 2.1 cache.default_expiration是應該被用來代替期滿指定的秒數新設置的名稱之後緩存項目畝將失效。默認值是300秒。舊名稱仍支持向後兼容。

所以屬性名稱可能不是你的問題(現在想知道如果我使用的「過期」鍵也可能是特定於memcache提供程序的,儘管它似乎與syscache一起使用)。

+0

SetProperty等同於編寫Properties [「keyName」]。當我看到Environment類時,我能夠找到以下內容:'public const string CacheDefaultExpiration =「cache.default_expiration」; '我試着做你提到的流暢配置。但是,我無法在設置中訪問配置中的會話工廠。該代碼目前正在使用NH 3.2.0.400和fNH 1.3.0.717 – 2012-07-31 15:38:30

+0

嗯,也許這是更新的,但我認爲它將在3.0以上。你確定你正在引用NHibernate.Cfg命名空間嗎?如果沒有,您將無法訪問配置中的擴展方法。 – AlexCuse 2012-07-31 16:35:59

+0

我覺得我的工作。我不知道,但是......你的提示肯定有幫助......因爲事實證明NHibernate.Cfg命名空間丟失了。非常感謝! – 2012-08-03 03:02:30