문제
다음 쿼리가 작동하려고합니다.
Session.Linq<FooBar>()
.SetCachable(true)
.SetCacheRegion("foobar")
.Select(x => new Baz(x.Foo, x.Bar))
.ToList();
캐싱이 꺼져있을 때 작동하지만 캐싱이 활성화되면 다음과 같은 예외가 있습니다.
System.InvalidCastException : 'BAZ'유형의 객체를 타이핑하여 '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