環境: 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
何か案は?それとも、質問に情報が不足しているのでしょうか?
ありがとう!