la mise en cache NHibernate ne fonctionne pas pour le type anonyme
-
20-09-2019 - |
Question
Je suis en train de faire la requête suivante au travail:
Session.Linq<FooBar>()
.SetCachable(true)
.SetCacheRegion("foobar")
.Select(x => new Baz(x.Foo, x.Bar))
.ToList();
Cela fonctionne lorsque la mise en cache est désactivé, mais le cache est activé I l'exception suivante:
System.InvalidCastException: Impossible de jeter l'objet de type 'Baz' à type 'System.Object []'.
Le reste de la trace de la pile est la suivante:
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)
Quelqu'un sait si cela est une limitation NHibernate ou que je fais quelque chose de mal?
La solution
LinqToNHibernate n'est pas une mise en œuvre complète pour la recherche de données.
Utilisation CriteriaQuery (environ de couverture de 95% sur tout ce qui est possible à la requête), ou HQL (couverture de 100%).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow