我一直在做一个使用fluent和syscache2的WCF服务。我几乎阅读了关于我目前困境的每一篇文章;我没有运气。
我正在尝试为我的二级缓存设置过期时间。我设置的任何值似乎都会被忽略,默认值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部分,但也不能工作。
有没有人有什么建议?
谢谢
发布于 2012-07-31 20:41:28
我总是毫无问题地使用它:
.ExposeConfiguration (cfg => {
cfg.Properties.Add ("expiration", "900");
})不过,我不确定Properties.Add的行为是否与您正在使用的SetProperty调用有什么不同。
看起来,如果您使用的是较新版本的NHibernate,您也可以依赖NHibernate.Cfg名称空间中的新扩展方法(这将替换您在fluent中的整个.Cache调用)。
.ExposeConfiguration (cfg => {
cfg.SessionFactory().Caching.Through<SysCacheProvider>().WithDefaultExpiration(900);
})在阅读时,我发现了this
cache.default_expiration or expiration (Int32):由于NH Contrib 2.1 cache.default_expiration是新的设置名称,应使用该名称而不是expiration来指定缓存项必须失效的秒数。默认值为300秒。为了向后兼容,仍然支持旧名称。
因此,属性名称可能不是您的问题(现在我想知道我使用的"expiration“键是否也是特定于memcache提供程序的,尽管它似乎适用于syscache)。
https://stackoverflow.com/questions/11730671
复制相似问题