nhibernate - deaktiviert das automatische \ lazy Laden von Child-Datensätzen für einen oder mehrere Beziehungen

8

Ich würde gerne wissen, ob es eine Möglichkeit gibt, das automatische Laden von Kinddatensätzen in nHibernate zu deaktivieren (für eine: viele Beziehungen).

Wir können das Lazy-Laden von Eigenschaften einfach ausschalten, aber ich möchte jede Art von automatischem Laden (faul und nicht faul) deaktivieren. Ich möchte nur Daten über Abfrage laden (d. H. HQL oder Kriterien)

Ich möchte immer noch die Beziehung zwischen übergeordneten untergeordneten Datensätzen in der Mapping-Datei definieren, um HQL zu erleichtern und übergeordneten untergeordneten Entitäten beitreten zu können, aber ich möchte nicht, dass die untergeordneten Datensätze als Teil des übergeordneten Datensatzes geladen werden, außer a Abfrage auf dem übergeordneten Datensatz explizit besagt, dass (über eifrig holen, etc).

Beispiel: Das Abrufen des Abteilungsdatensatzes aus der Datenbank sollte nicht alle Mitarbeiterdatensätze aus der Datenbank abrufen, da sie möglicherweise nie benötigt werden.

Eine Option besteht darin, die Employees-Auflistung in Department als Lazy Load festzulegen. Das Problem bei diesem Ansatz besteht darin, dass das Objekt, sobald es der aufrufenden API übergeben wurde, die Lazy Load-Eigenschaft "anfassen" kann und die gesamte Liste von der Datenbank abruft.

Ich habe versucht, "evict" zu verwenden - um das Objekt zu trennen, aber es scheint nicht immer zu funktionieren und führt keine tiefe Räumung des Objekts durch. Außerdem wird der Lazy-Loaded-Eigenschaftstyp mit einer Proxy-Klasse abstrahiert, die später im Code, in dem wir versuchen, über Reflektion am Objekt zu arbeiten, Verwüstung anrichtet, und es trifft auf den nicht-expandierten Typ des Objekts.

Ich bin ein Anfänger zu nHibernate, alle Zeiger oder Hilfe wären von großer Hilfe.

    
dotnetcoder 20.10.2008, 08:13
quelle

2 Antworten

3

Wenn Sie Ihre Anforderung eingeben, können Sie einfach nicht von Abteilung zu Mitarbeitern zuordnen und auch keine Mitarbeitereigenschaft in Ihrer Abteilung haben. Das würde bedeuten, dass Sie immer einen Datenbanktreffer machen müssen, um die Mitarbeiter einer Datenbank zu finden.

Wenn diese Code-Beispiele nicht sofort funktionieren, bin ich nicht in der Nähe eines Compilers

Ihre Abteilung könnte also so aussehen:

%Vor%

und Ihr Mitarbeiter würde wie folgt aussehen:

%Vor%

Immer wenn Sie Mitarbeiter für eine Abteilung suchen möchten, müssen Sie anrufen:

%Vor%

Ganz einfach, weil Ihre Spezifikation sagt "Abteilungen haben viele Mitarbeiter" bedeutet nicht, dass Sie es als eine bidirektionale Zuordnung zuordnen müssen. Wenn Sie Ihre Unidirektionalität beibehalten können, können Sie Ihren Datenzugriff auch wirklich erhalten.

Google "Domain Driven Design" Aggregat oder siehe Seite 125 von Eric Evans Buch über Domain Driven Design für weitere Informationen

    
David Kemp 23.10.2008, 13:24
quelle
-1

Sie können das Attribut "träge" für die Sammlung verwenden. In Ihrem Beispiel hat Abteilung n Mitarbeiter, wenn faul aktiviert ist, werden die Mitarbeiter nicht standardmäßig geladen werden, wenn Sie eine Abteilung laden: Ссылка

Sie können Abfragen haben, die Abteilung und Mitarbeiter explizit zusammen laden. Es ist die "holen" Option: Ссылка

    
MatthieuGD 20.10.2008 08:52
quelle

Tags und Links