2013-01-21 18 views
10

Ho una domanda sul comportamento delle opzioni enum Cascade quando si utilizza NHibernate Mapping by Code.Mappatura NHibernate tramite codice (Loquacious) - Opzioni Cascade

Enum è seguenti opzioni:

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

Essi sono destinati a essere utilizzati come combinazioni po 'di bandiera (per quanto ho capito).

Ho guardato attraverso la documentazione NHibernate, e le seguenti opzioni a cascata per le mappature XML sono definiti c'è: Lifecycles and object graphs

chiunque può descrivere le opzioni a cascata dalla nuova mappatura NHibernate per codice? La metà di loro si auto descrive, l'altra metà non lo è.

+0

che non sono auto-descriventi? – Firo

+0

Non ne sono sicuro. Persist = Salva-Aggiorna, Aggiorna? Unire? Remove = Delete, Detach =? Ricollegare =? DeleteOrphans = delete-orphan, All = all. – Cortlendt

+0

Sono d'accordo, questo enum è un casino, 'All' dovrebbe davvero includere tutte le bandiere bit a bit ... – Lukazoid

risposta

12

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

Nota: all cascate tutti tranne di delete-orphan.

7
  • Nessuno: cascate niente
  • Persist = ISession.SaveOrUpdate
  • Refresh = ISession.Refresh: carica lo stato db dell'oggetto in memoria e aggiorna le sue proprietà
  • Unisci = ISession.Merge: carica l'oggetto con lo stesso ID da db e aggiorna le sue proprietà con le proprietà dell'istanza specificata. restituisce l'oggetto caricato
  • Remove = ISession.Delete: elimina il caso dato in dB e staccare dalla sessione
  • Staccare = ISession.Evict: rimuove l'oggetto dal monitoraggio
  • ricollegare sessione/cambio = ISession.Lock (LockMode.None): riattaccare il caso dato non modificato con la sessione
  • DeleteOrphans: eliminare oggetti associati che non fa riferimento controllante
  • Tutto: tutte le obove tranne DeleteOrphans (thx a @Stefan Steinegger)
+0

Non è del tutto corretto. Vedi la mia risposta. –

Problemi correlati