Кэширование NHibernate не работает для анонимного типа

StackOverflow https://stackoverflow.com/questions/1746625

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь заставить работать следующий запрос:

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 %).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top