流畅的NHibernate Syscache2缓存过期

时间:2012-07-30 22:32:11

标签: nhibernate caching fluent-nhibernate syscache2

我一直在研究使用fluent和syscache2的WCF服务。关于我目前的困境,我几乎都读过关于SO的每一篇文章;我没有运气。

我正在尝试设置二级缓存的到期时间。我设置的任何值似乎都被忽略,默认值为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>

app.config有一个变体,它有一个syscache部分,它使用了区域但是也没有用。

有人对想法有任何建议吗?

谢谢

1 个答案:

答案 0 :(得分: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或expiration(Int32):因为NH Contrib 2.1 cache.default_expiration是应该使用的新设置名称而不是expiration,以指定必须使缓存项无效的秒数。默认值为300秒。为了向后兼容,仍支持旧名称。

所以属性名称可能不是你的问题(现在想知道我使用的“expiration”键是否也特定于memcache提供程序,虽然它似乎与syscache一起工作)。