2009-07-20 10 views
11

Haftungsausschluss:? Ich bin ein NHibernate noobie so hoffentlich diese Frage Sinn macht, ich habe eine many-to-many-Beziehung zwischen zwei Klassen so etwas wie ...NHibernate Cascade = save-update "

public class Entity1 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity2> Entity2List; 
} 

Public class Entity2 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity1> Entity1List; 
} 

ich habe. fügte in beiden Klassenzuordnungen eine Viele-zu-Viele-Beziehung zu einer Tasche hinzu, definierte eine Assoziationstabelle, war sich aber nicht sicher, welche Kaskadenoption verwendet werden sollte.Eine neue Entity1-Instanz erstellen und eine neue Entity2-Instanz zur Liste hinzufügen , Aufruf Save, und beide werden in die Datenbank eingefügt (und umgekehrt). Beim Löschen einer Entität sollte sie alle Zuordnungen zu untergeordneten Entitäten löschen, aber nicht die untergeordnete Entität selbst. Sollte ich cascade = "save-update" verwenden?

Antwort

25

Ja. Es klingt wie 'save-update' in diesem Fall.

Ich habe nie eine großartige Erklärung für jede Kaskadenoption in der Dokumentation gefunden, aber diese blog post von Ayende als Referenz verwendet.

  • keine - machen keine Kaskaden, lassen Sie die Nutzer diese selbst abwickelt.
  • save-Update - wenn das Objekt gespeichert/aktualisiert, die Zuordnungen überprüfen und speichern/aktualisieren alle Gegenstände, die es erfordern (einschließlich speichern/aktualisieren die Verbände in many-to-many-Szenario).
  • löschen - Wenn das Objekt gelöscht wird, löschen Sie alle Objekte in der Assoziation.
  • delete-orphan - Wenn das Objekt gelöscht wird, löschen Sie alle Objekte in der Assoziation. Wenn ein Objekt aus der Zuordnung entfernt und nicht mit einem anderen Objekt (verwaist) verknüpft wird, löschen Sie es außerdem.
  • Alle - Wenn ein Objekt speichern/aktualisieren/löschen, überprüfen Sie die Verknüpfungen und speichern/aktualisieren/löschen Sie alle gefundenen Objekte.
  • all-delete-orphan - Wenn ein Objekt gespeichert/aktualisiert/gelöscht wird, überprüfen Sie die Verknüpfungen und speichern/aktualisieren/löschen Sie alle gefundenen Objekte. Wenn ein Objekt aus der Zuordnung entfernt und nicht mit einem anderen Objekt (verwaist) verknüpft wird, löschen Sie es außerdem.