Mam dość dziwny wyjątek, gdy próbuję zmaterializować IQueryable
Mam formularz NHibernate.Linq
. Wyjątek typu Antlr.Runtime.Tree.RewriteEmptyStreamException
po prostu stwierdza plan b
i nic więcej. Szczegółowy wyjątek znajduje się w http://pastebin.com/kR2dvDHdWyjątek Antlr z komunikatem "plan b" podczas chodzenia IQueryable jednostek NHibernate
tutaj kod, który zgłasza wyjątek:
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
klasy
Materia wyciągowy jest proste następujących urządzeń:
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>
jest klasą narzędzie, które realizuje IQueryable metodami rozszerzenia NHibernate.LINQ
do NHibernate.Session
. Nic konkretnego tutaj, ale na wszelki wypadek, oto listing: http://pastebin.com/MgDxDg3Y
Nie sądzę, że jest to związane z odwzorowaniami NHibernate, ponieważ inne testy, które wchodzą w interakcję z jednostką Matter
, działają dobrze. Najprawdopodobniej jest to związane z klauzulą Where
, ale nie mogę zrozumieć, co dzieje się z tą klauzulą. Próbowałem zastępując
OrderByDescending(msh => msh.CreateTime).FirstOrDefault()
do
OrderBy(msh => msh.CreateTime).LastOrDefault()
ale po prostu powiedział mi The LastResultOperator result operator is not current supported
, więc myślę NHibernate.Linq
prostu nie może pozostać LastOrDefault
.
Wszelkie pomysły, co znaczy plan b
i jak mogę to obejść?
Mogę zaimportować twój problem, więc powiedziałbym, że to błąd w NHibernate, albo powinien wygenerować zapytanie lub powinien wyrzucić nieobsługiwany wyjątek. Powinieneś przesłać raport o błędzie. Aby obejść ten problem, możesz ocenić całe zapytanie po stronie klienta lub zreorganizować zapytanie, zaczynając od 'Repository' ... –
nemesv