我试图让下面的查询工作:

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%覆盖率)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top