Tengo una excepción bastante extraña cuando intento materializar el IQueryable
Recibí el formulario NHibernate.Linq
. La excepción del tipo Antlr.Runtime.Tree.RewriteEmptyStreamException
solo dice plan b
, y nada más. excepción detallada se puede encontrar en http://pastebin.com/kR2dvDHdExcepción de Antlr con el mensaje "plan b" al caminar IQueryable de las entidades de NHibernate
Aquí está el código que genera una excepción:
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
clase
Materia Extractor es tan simple como siguientes;
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>
es una clase de utilidad que implementa IQueryable a través de NHibernate.LINQ
métodos de extensión a NHibernate.Session
. Nada específico aquí, pero por si acaso, aquí está la lista: http://pastebin.com/MgDxDg3Y
No creo que está relacionado con las asignaciones de NHibernate, ya que otras pruebas que interactúan con Matter
entidad de ejecución muy bien. Lo más probable es que esté relacionado con la cláusula Where
, pero no puedo entender qué está pasando con esa cláusula. He intentado reemplazar
OrderByDescending(msh => msh.CreateTime).FirstOrDefault()
a
OrderBy(msh => msh.CreateTime).LastOrDefault()
pero simplemente me dijeron The LastResultOperator result operator is not current supported
, así que creo NHibernate.Linq
simplemente no puede permanecer LastOrDefault
.
¿Qué significa plan b
y cómo puedo solucionarlo?
Podría reproducir tu problema, por lo que diría que es un error en NHibernate, o bien debería generar la consulta o debería arrojar una excepción no admitida. Debe enviar un informe de error. Como solución, puede evaluar toda su consulta en el lado del cliente o reorganizar su consulta para comenzar con 'Repository' ... –
nemesv