2013-01-21 14 views
10

Mam pytanie dotyczące zachowania opcji wyliczania kaskadowego podczas korzystania z mapowania NHibernate według kodu.Mapowanie NHibernate według kodu (Loquacious) - opcje kaskady

Enum ma następujące opcje:

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

Są one przeznaczone do stosowania kombinacji nieco jak flaga (o ile mi się to).

szukałem thru dokumentacji NHibernate i następujące opcje kaskadowe dla odwzorowań XML są zdefiniowane tam: Lifecycles and object graphs

Czy ktoś może opisać opcji kaskady nowego mapowania NHibernate za pomocą kodu? Połowa z nich opisuje siebie, druga połowa nie.

+0

które nie są samoopisujące się? – Firo

+0

Nie jestem pewien. Persist = Save-Update, Refresh? Łączyć? Remove = Delete, Detach =? ReAttach =? DeleteOrphans = delete-orphan, All = all. – Cortlendt

+0

Zgadzam się, to enum to bałagan, "Wszystko" powinno naprawdę zawierać wszystkie bitowe flagi ... – Lukazoid

Odpowiedz

12

Od 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"; 
     } 
    } 

Uwaga: all kaskady wszystko z wyjątkiem od delete-orphan.

7
  • Brak: Nic kaskady
  • Utrzymują = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh: wczytuje stan db obiektu w pamięci i aktualizuje jego właściwości
  • Merge = ISession.Merge: ładuje obiekt z tym samym identyfikatorem z db i aktualizuje jego właściwości właściwościami danej instancji. zwraca załadowanego obiektu
  • Remove = ISession.Delete: usuwanie danej instancji w db i odłączyć się od sesji
  • Odłączyć = ISession.Evict: usuwa obiekt z śledzenia
  • ponownie podłączyć sesji/zmiany = ISession.Lock (LockMode.None): ponownie zamontować dany niezmodyfikowanej instancję sesji
  • DeleteOrphans: usuwanie związane obiektów, które nie są lokalizowane przez rodzica
  • Wszystko: wszystkie obove wyjątkiem DeleteOrphans (thx do @Stefan Steinegger)
+0

To nie jest całkowicie poprawne. Zobacz moją odpowiedź. –

Powiązane problemy