2016-04-06 13 views
1

Ich habe einige Probleme mit einer Linq NHibernate Abfrage.NHibernate Sammlung eifrig laden nehmen

Ich brauche eine Charge von Gutscheinen mit ihren Details zu bekommen. Da ich sie iterieren muss, wollte ich alle Informationen in einer einzigen Ausführung erhalten.

Meine Frage ist die folgende:

   return this.Session.Query<VouchersToIntegrate>() 
       .Take(query.BatchSize) 
       .Fetch(x => x.VoucherLines)      
       .ToList(); 

Wo VouchersToIntegrate den Gutschein und VoucherLines die Linien jeder Gutschein.

Die BatchSize ist jetzt auf 50.000, aber wenn ich alle Objekte zurückgebe, bekomme ich nur 23XXX. Das liegt daran, dass das Framework intern ein distinct ausführt, nachdem es alle Objekte aus der Datenbank (clientseitig) abgerufen hat. Gibt es eine andere Möglichkeit, die 50.000 Objekte mit dem eindeutigen Filter auf der SQL Server-Seite zu bekommen?

Dank

+0

Das Iterieren über lazy loaded Eigenschaften mit NHibernate führt nicht zu n + 1 Ladeproblemen, wenn Sie Ihre Entitäten ordnungsgemäß zugeordnet haben. Siehe [diese ausführlichere Erläuterung] (/ a/36070727/1178314). Wenn Sie also eifrig laden wollen, weil Sie das Ladeproblem n + 1 haben, sollten Sie es lesen. –

Antwort

0

Es gibt keine Möglichkeit, diese Abfrage mit NHibernate LINQ-Anbieter zu konstruieren.

Sie können jedoch die entsprechende SQL-Abfrage manuell erstellen und sie dann Entitäten zuordnen, die die "Native SQL" -API von NHibernate verwenden:..