2009-06-05 11 views
2

Diese Frage könnte ein Duplikat dieser sein:Wie kann das automatische Laden in NHibernate deaktiviert werden?

nhibernate - disable automatic\lazy loading of child records for one to many relationsihps

Ich mag würde wissen, ob eine Möglichkeit gibt nhibernate zu sagen, ist ein Kind Sammlungen zu tun, nicht geladen werden (am besten, wenn es mit fließend NHibernate) es sei denn, ich mache es manuell mit einer Abfrage (alle Zuordnungen behalten!).

Das Problem ist, dass sogar die Lazy Loading-Funktion automatisch deaktiviert wird. Ich möchte, dass keine Sammlungen geladen werden, es sei denn, ich gebe einen Abrufmodus in meiner Abfrage an.

Antwort

1

Wie Sie aus der Frage und Antwort, die Sie verknüpft haben, sehen können, können Sie dies erreichen, indem Sie Beziehungen unidirektional machen. Also anstatt direkt wie zu beantworten, werde ich fragen warum in der Hoffnung, zu einem besseren "wie."

Ich sehe auf jeden Fall, warum Sie Sammlungen nicht immer gerne abgerufen werden, und das ist, warum NHibernate Lazy lädt (und warum NHibernate immer lädt Sammlungen, wenn Sie Pre-Fetch). NHibernate wird diese Sammlung nicht tatsächlich abrufen, bis Sie tatsächlich danach gefragt haben. Also meine Frage ist warum wollen Sie NHibernate nicht die Sammlung zu laden, wenn Sie daran arbeiten? Was soll NHibernate tun, wenn Sie auf eine untergeordnete Sammlung in Ihrer Entität zugreifen?

Update:

Sie haben wirklich nicht meine Frage beantworten, warum (vielleicht bin ich stur gerade), aber in Ordnung, Sie steuern möchten. Nun, der einfachste Weg, um NH davon abzuhalten, seinen Job zu machen, besteht darin, es ihm nicht zu sagen (d. H. Es nicht zu kartieren). Das bedeutet, dass Sie das "viele" (Sammlungs-) Ende der Beziehung nicht abbilden. Sie können die Sammlung weiterhin in Ihrer Klasse aufbewahren, aber solange Sie NHibernate nicht angewiesen haben, sie zu füllen, indem Sie sie zu Ihrer Zuordnungsdatei hinzufügen, wird dies nie der Fall sein. Anschließend können Sie eine PopulateCollection-Methode hinzufügen, um die NH-Abfrage auszuführen und die Ergebnisse in dieser Auflistung zu speichern. Sie verlieren jedoch die netten Semantiken, die NHibernate für Sammlungen bereitstellt, da sie Änderungen daran nicht verfolgen können. Sie müssen Ihre eigenen Add- und Remove-Methoden implementieren.

Also, im Grunde David Kemps Antwort auf die andere Frage.

+1

der Grund ist einfach, ich möchte manuell steuern, was geladen wird und was nicht. Ich möchte nicht, dass Abfragen unter der Haube in die Datenbank gehen. Außerdem ist es sehr ärgerlich, wenn Entitäten beim Debuggen lazy geladen werden. Ich würde eine Null Ausnahme erwarten, wenn ich auf einer nicht geladenen Sammlung operiere. – Drevak

Verwandte Themen