Domanda

Sto cercando di ottenere la seguente query al lavoro:

Session.Linq<FooBar>()
    .SetCachable(true)
    .SetCacheRegion("foobar")
    .Select(x => new Baz(x.Foo, x.Bar))
    .ToList();

Questo funziona quando la cache è spento, ma con cache abilitata I visualizzato il seguente eccezione:

System.InvalidCastException: Impossibile eseguire il cast oggetto di tipo 'Baz' a Tipo 'System.Object []'.

Il resto della traccia dello stack è:

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) 

Qualcuno sa se si tratta di una limitazione di NHibernate o sto facendo qualcosa di sbagliato?

È stato utile?

Soluzione

LinqToNHibernate non è un'implementazione completa per l'interrogazione dei dati.

Usa CriteriaQuery (copertura del circa il 95% di sconto tutto ciò che è possibile interrogare), o HQL (copertura del 100%).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top