题
我试图让下面的查询工作:
Session.Linq<FooBar>()
.SetCachable(true)
.SetCacheRegion("foobar")
.Select(x => new Baz(x.Foo, x.Bar))
.ToList();
这个工程时,高速缓存被关闭,但缓存启用我 收到以下异常:
System.InvalidCastException:无法转换类型的对象“巴兹”来 类型 'System.Object的[]'。
栈跟踪的其余部分是:
at NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session)
at NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result)
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
任何人都知道这是一个NHibernate的限制还是我做错了什么?
解决方案
LinqToNHibernate不是用于查询的数据的充分执行。
使用CriteriaQuery中(大约95%的覆盖了所有这是可能的查询),或HQL(100%覆盖率)。
不隶属于 StackOverflow