2013-01-21 5 views
10

Ich habe eine Frage zu Cascade enum Optionen Verhalten bei der Verwendung von NHibernate Mapping By Code.NHibernate Mapping von Code (Loquacious) - Cascade Optionen

Enum hat folgende Möglichkeiten:

[Flags] 
public enum Cascade 
{ 
    None = 0, 
    Persist = 2, 
    Refresh = 4, 
    Merge = 8, 
    Remove = 16, 
    Detach = 32, 
    ReAttach = 64, 
    DeleteOrphans = 128, 
    All = 256, 
} 

sie bestimmt sind, wie Bit-Flag-Kombinationen verwendet werden (soweit ich es bekommen).

Ich habe durch NHibernate Dokumentation sieht, und die folgenden Kaskaden Optionen für XML-Zuordnungen sind dort definiert: Lifecycles and object graphs

Kann jemand Kaskade Optionen von neuem Nhibernate Mapping von Code beschreiben? Die Hälfte von ihnen beschreibt sich selbst, die andere Hälfte nicht.

+0

welche sind nicht selbstbeschreibend? – Firo

+0

Ich bin mir nicht sicher. Persist = Speichern-Aktualisieren, Aktualisieren? Verschmelzen? Entfernen = Löschen, Trennen =? ReAttach =? DeleteOrphans = delete-orphan, All = alle. – Cortlendt

+0

Ich stimme zu, diese Enum ist ein Chaos, "Alle" sollte wirklich alle bitweisen Flags enthalten ... – Lukazoid

Antwort

12

Von src\NHibernate\Mapping\ByCode\Impl\CascadeConverter.cs

private static IEnumerable<string> CascadeDefinitions(this Cascade source) 
    { 
     if (source.Has(Cascade.All)) 
     { 
      yield return "all"; 
     } 
     if (source.Has(Cascade.Persist)) 
     { 
      yield return "save-update, persist"; 
     } 
     if (source.Has(Cascade.Refresh)) 
     { 
      yield return "refresh"; 
     } 
     if (source.Has(Cascade.Merge)) 
     { 
      yield return "merge"; 
     } 
     if (source.Has(Cascade.Remove)) 
     { 
      yield return "delete"; 
     } 
     if (source.Has(Cascade.Detach)) 
     { 
      yield return "evict"; 
     } 
     if (source.Has(Cascade.ReAttach)) 
     { 
      yield return "lock"; 
     } 
     if (source.Has(Cascade.DeleteOrphans)) 
     { 
      yield return "delete-orphan"; 
     } 
    } 

Hinweis: all Kaskaden alle außer von delete-orphan.

7
  • Keine: nichts Kaskaden
  • Persist = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh: lädt den db Zustand des Objekts in den Speicher und aktualisiert seine Eigenschaften
  • Merge = ISession.Merge: lädt das Objekt mit der gleichen ID aus db und aktualisiert seine Eigenschaften mit den Eigenschaften der angegebenen Instanz. kehrt das geladene Objekt
  • Remove = ISession.Delete: die angegebene Instanz in db löschen und von Sitzung
  • Detach = ISession.Evict lösen: Entfernt das Objekt aus der Sitzung/Wechsel
  • Reattach Tracking = ISession.Lock (LockMode.None): bringen Sie die angegebenen unmodifizierten Instanz mit der Sitzung
  • DeleteOrphans: zugehörige Objekte löschen, die von der Mutter referenziert werden nicht
  • Alle: alle der obove außer DeleteOrphans (thx to @Stefan Steinegger)
+0

Es ist nicht ganz richtig. Siehe meine Antwort. –