Ho un'eccezione piuttosto strana quando provo a materializzare lo IQueryable
Ho ottenuto il modulo NHibernate.Linq
. L'eccezione del tipo Antlr.Runtime.Tree.RewriteEmptyStreamException
indica solo plan b
e nient'altro. eccezione dettagliate sono disponibili all'indirizzo http://pastebin.com/kR2dvDHdEccezione di antlr con messaggio "piano b" quando si cammina IQueryable di entità NHibernate
Ecco il codice che genera un'eccezione:
var matterExtractor = new MatterExtractor();
var InactiveMatters = matterExtractor.GetMattersAtStatus(General.InactiveMatterStatus);
Assert.IsNotNull(InactiveMatters); //OK
Assert.IsInstanceOfType(InactiveMatters, typeof (IQueryable<Matter>)); // OK
var MaterializedMatters = InactiveMatters.ToList(); //Exception is thrown
classe
materia Extractor è semplice come follwing:
public class MatterExtractor
{
public virtual IQueryable<Matter> GetMattersAtStatus(MatterStatus status)
{
return
(new NHibernateRepository.Repository<Matter>()).Where(
m => m.MatterStatusHistories.OrderByDescending(msh => msh.CreateTime).FirstOrDefault().MatterStatus == status);
}
}
NHibernateRepository.Repository<T>
è una classe di utilità che implementa IQueryable tramite i metodi di estensione NHibernate.LINQ
a NHibernate.Session
. Nulla di specifico qui, ma nel caso, ecco la lista: http://pastebin.com/MgDxDg3Y
Non penso sia correlato ai mapping di NHibernate, poiché altri test che interagiscono con l'entità Matter
funzionano correttamente. Molto probabilmente è correlato alla clausola Where
, ma non riesco a capire cosa c'è di sbagliato in quella clausola. Ho provato a sostituire
OrderByDescending(msh => msh.CreateTime).FirstOrDefault()
a
OrderBy(msh => msh.CreateTime).LastOrDefault()
ma appena mi ha detto The LastResultOperator result operator is not current supported
, quindi penso che NHibernate.Linq
proprio non può rimanere LastOrDefault
.
Qualche idea di cosa significa plan b
e come posso risolvere il problema?
Potrei riproffare il tuo problema quindi direi che questo è un bug in NHibernate, o dovrebbe generare la query oppure dovrebbe generare un'eccezione non supportata. Dovresti inviare una segnalazione di bug. Come soluzione alternativa puoi valutare l'intera query sul lato client o riorganizzare la query per iniziare con 'Repository' ... –
nemesv