„Konnte nicht instantiate“ NHibernate.QueryException Raise von Combined Linq Abfrage

StackOverflow https://stackoverflow.com/questions/3998247

  •  10-10-2019
  •  | 
  •  

Frage

Die Ausführung der folgenden NHibernate.Linq Anweisung wirft eine "could not instantiate: Reservation001.Services.ReservationDto" NHibernate.QueryException eine innere InvalidCast Ausnahme enthält ( "Objekt muss IConvertible implementieren."):

var inOneStep = (from r in session.Linq<Models.ReservationHeader>()
    select new ReservationDto(r.Current));
return inOneStep;

Allerdings ist die oben in zwei Abfragen nach der Trennung, mit ToList () aufgerufen, den Ergebnissen der ersten, der Code ausführt, in Ordnung.

var step1 = (from r in session.Linq<Models.ReservationHeader>()
     select r).ToList();
var step2 = from z in step1
     select new ReservationDto(z.Current);
return step2;

Warum ist die einzige Anweisung Version eine Ausnahme auslösen?

Danke,
Ben

War es hilfreich?

Lösung

Der Grund, dass die erste nicht funktioniert, weil die ganze Abfrage an NHibernate gesendet zu werden, und (wie die Ausnahme Sie sagt) NHibernate erwartet etwas mit ReservationDto IConvertible zu sein.

Das zweistufige Verfahren vermeidet diesen Fehler, da durch den Aufruf „ToList ()“ Sie führen die Abfrage in NHibernate sofort ausgeführt ohne Einbeziehung ReservationDto und Zurückführen einer Objektsammlung. Ihr zweiter Schritt ist dann einfach Betrieb auf einer Objektsammlung, und da NHibernate nicht mehr beteiligt, Sie den Fehler vermeiden.

Im Allgemeinen verwendet Linq verzögerte Ausführung, mit einigen Funktionen (wie ToList ()) zwingen sofortige Auswertung. Siehe http://devlicio.us/ Blogs / derik_whittaker / Archiv / 2008/04/07 / Linq-and-verzögerten execution.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top