在NHibernate上缓存sqlquery时的ArgumentNullException

时间:2014-11-03 11:59:09

标签: c# caching nhibernate fluent-nhibernate syscache

环境: NHibernate 4.0.0.4000; NHibernate.Caches.SysCache 4.0.0.4000; Web MVC / API 4.5.1; FluentNHibernate 1.4.0.0; VS2013;

我试图在nhibernate上缓存SQL查询(完美无需缓存),如您所见:

        return Session.CreateSQLQuery(sql)
            .AddScalar("Id", NHibernateUtil.Int32)
            .AddScalar("Summary", NHibernateUtil.String)
            .SetResultTransformer(Transformers.AliasToBean<ProductDto>())
            .SetCacheable(true)
            //.SetCacheRegion("Long") throws same error regardless of this
            .List<ProductDto>()
            ;

但它不断抛出ArgumentNullException,请参阅详细信息:

Value cannot be null.
Parameter name: source
  at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source, Func`2 predicate)
   at NHibernate.Util.ArrayHelper.CountTrue(Boolean[] array)
   at NHibernate.Transform.CacheableResultTransformer.Create
   ...

我曾尝试使用另一个缓存提供程序,即NHibernate.Caches.RtMemoryCache,但错误是一样的。

调用后也不会记录任何nhibernate信息,因为错误显然是在其管道的早期阶段发生的。

缓存配置,使用Fluent NHibernate:

 (OracleClientConfiguration.Oracle10.ConnectionString(connStr).AdoNetBatchSize(20000)).Cache(c => c.ProviderClass<SysCacheProvider>().UseSecondLevelCache().UseQueryCache())

记录缓存设置的信息(如果我使用区域,则自然会发生变化):

INFO  2014-11-03 08:51:33,474 [1    ] NHibernate.Cache.StandardQueryCache      - starting query cache at region: NHibernate.Cache.StandardQueryCache

有什么想法吗?或者问题可能缺乏信息?

谢谢!

0 个答案:

没有答案