Frage

Sorry, wenn dies eine Betrogene ist, konnte es nicht finden, aber nicht so recht wissen, was zu suchen, trotzdem ...

Ich habe drei Klassen, Parent, Child und Other

Parent hat viele Child wo Kind eine Parent_Id Spalte

Other hält einen Verweis auf eine Child durch eine Child_Id Spalte

Wenn ich eine Parent löschen, möchte ich auch alle zugehörigen Child Objekte löschen. Wenn diese Child Objekte, die von irgendwelchen Other Klassen referenziert werden, möchte ich ihr (die Other Objekte) Child_Id Referenzen zunichte gemacht werden.

Was Kaskade Regeln muss ich auf die beiden Beziehungen?

Außerdem wird NHibernate Update Entitäten im Speicher sowie in der Datenbank?

d. wenn ich ein paar Parent, Child und Other im Speicher haben (das heißt geladen von db, nicht transient) und NH erzählen eine Parent zu löschen, was passieren wird? Ich gehe davon aus dem Parent und Child Objekte werden transiente werden? Was ist mit der Child Eigenschaft aller Other Objekte passieren?

Edit: bei der Verwendung von All-löschen-Waise, welche Klassen ein Objekt als Waise? In dem obigen Beispiel ist ein Child eine Waise, wenn seine Eltern Parent gelöscht wird? Hat die Referenz von Other Angelegenheit, wenn ein Unternehmen als verwaiste Berücksichtigung?

Danke

War es hilfreich?

Lösung

NH aktualisiert nicht alle Ihre Entitäten im Speicher (mit Ausnahme von Ids und Versionen). NH ist nicht verantwortlich, die die Beziehungen von Ihnen Einheiten zu verwalten. Es bleibt nur, was Sie in Erinnerung an die Datenbank haben.

Aus dieser Sicht sollte es leichter zu verstehen.

cascade="delete" bedeutet, dass, wenn die Eltern gelöscht wird, wird das Kind als auch gelöscht. cascade="delete-orphan" bedeutet, dass zusätzlich wird das Kind, auch wenn kein Elternteil Referenzen es nicht mehr gelöscht. Dies funktioniert natürlich nur, wenn das Kind in der Sitzung ist.

Die gelöschte Instanz wird transient im Speicher. Bezugnahmen auf die vorübergehende Instanz (von Other) wird eine Ausnahme verursachen. AFAIK, müssen Sie Bezug auf gelöschte Instanzen selbst entfernen. Sie wahrscheinlich kann es durch einige Tricks implizit machen, aber ich bezweifle, dass diese sauber sein wird. Es ist die Geschäftslogik.

Für Eltern-Kind-Beziehungen, cascade="all-delete-orphan" angemessen ist.

Für die regelmäßigen Bezug ziehe ich cascade="none".

Es gibt eine große Erklärung von Ayende Rahien

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