如何在NHibernate> = 3.2中配置NHibernate的二级缓存?

时间:2012-04-02 15:12:00

标签: nhibernate fluent-nhibernate nhibernate-caches

在升级到NHibernate 3.2之前,我使用了以下代码用于Fluent NHibernate:

OracleClientConfiguration configurer = (OracleClientConfiguration.Oracle10.ShowSql().ConnectionString(c =>
                         c.FromConnectionStringWithKey(ConnectionString.Development))
                         .DefaultSchema("MySchema")
                         .UseReflectionOptimizer()
          /* Here --> */ .Cache(c => 
                                 c.ProviderClass<SysCacheProvider>()
                                 .UseQueryCache()));

但是,NHibernate 3.2中不再使用.Cache()扩展方法。

如何设置缓存提供程序?

编辑:我也尝试过:

        .ExposeConfiguration(configuration =>
        {
            configuration.SetProperty(Environment.UseQueryCache, "true");
            configuration.SetProperty(Environment.CacheProvider, "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache2");
        });

2 个答案:

答案 0 :(得分:6)

这是我使用SysCache提供程序进行配置的摘录。

var configuration = new Configuration()
    .Cache(x => x.UseQueryCache = true)
configuration.SessionFactory()
    .Caching.Through<SysCacheProvider>().WithDefaultExpiration(60)

答案 1 :(得分:0)

http://www.markhneedham.com/blog/2010/06/16/fluent-nhibernate-and-the-2nd-level-cache/ &安培; https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

  

一个常见错误(它也发生在我身上!)是忘记提交或   在向/添加或更改实体/聚合时省略事务   数据库。如果我们现在从另一个会话访问实体/聚合   然后第二级缓存将不准备为我们提供缓存   实例和NHibernate(一个意外的往返)   数据库)。

我有同样的问题,并且多次用Google搜索,最后我看到了这个。 坏消息是,我尝试使用trasaction,但仍然无法打开二级缓存!