Ich habe ein ziemlich tiefes Objektdiagramm (5-6 Knoten), und wenn ich Teile davon durchquere, sagt mir NHProf, dass ich ein "Select N + 1" Problem habe (was ich machen).Verhindern Fluent NHibernate select n + 1
Die beiden Lösungen, die ich bin mir dessen bewusst sind
- Eager laden Kinder
- auseinanderzubrechen mein Objektgraph (und eifrig Last)
ich wirklich nicht, entweder tun wollen dieser (obwohl ich die Grafik kann auseinander brechen später, als ich es forsee wachsend)
Vorerst ....
Ist es möglich NHibernate (mit FluentNHibernate) zu sagen, dass, wenn ich versuche, auf Kinder zuzugreifen, sie alle auf einmal zu laden, anstatt select-n + 1-in, wenn ich über sie iteriere?
Ich bekomme auch "unbegrenzte Ergebnisse gesetzt" s, das ist wahrscheinlich das gleiche Problem (oder vielmehr, wird durch die obige Lösung wenn möglich gelöst werden).
Jede Kindersammlung (im gesamten Graphen) wird nur etwa 20 Mitglieder haben, aber 20^5 ist eine Menge, also möchte ich nicht eifrig alles laden, wenn ich die Wurzel bekomme, sondern einfach alle bekommen Kindersammlung, wenn ich in die Nähe gehe.
Edit: ein nachträglicher Einfall .... was, wenn ich Paging einführen möchte, wenn ich Kinder darstellen möchte? Muss ich hier meine Objektgrafik aufbrechen, oder gibt es ein bisschen Nachlässigkeit, die ich anwenden kann, um all diese Probleme zu lösen?
"Es klingt für mich, dass Sie den Ansatz verfolgen möchten, Ihr Domänenmodell zu verwenden, anstatt eine spezifische Nhibernate-Abfrage für dieses Szenario zu erstellen." definitiv. das Letzte, was ich will, sind spezifische Abfragen. Ich überprüfe das Zeug, ta –
hinweis -> fluent-nh-Schnittstelle unterstützt jetzt das BatchSize() - Attribut – KevinT