2009-07-20 5 views
11

Disclaimer:? Sono un noobie NHibernate quindi speriamo che questa domanda ha un senso che ho una relazione molti-a-molti tra due classi qualcosa di simile ...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; 
} 

ho. aggiunto una relazione molti-a-molti con una borsa in entrambi i mapping di classe, definendo una tabella di associazione ma non sono sicuro di quale opzione di cascata utilizzare.Voglio essere in grado di creare una nuova istanza Entity1, aggiungere una nuova istanza Entity2 alla sua lista , chiama Salva, ed entrambi vengono inseriti nel database (e viceversa). Quando si cancella un'entità, si dovrebbe eliminare qualsiasi associazione alle entità figlio ma non all'entità figlio stessa. Devo usare cascade = "save-update"?

risposta

25

Sì. Sembra che "save-update" sia quello che vuoi, in questo caso.

Non ho mai trovato una grande spiegazione di ogni opzione in cascata nella documentazione, ma ho usato questo blog post di Ayende come riferimento.

  • nessuno - non fare alcun cascate, lasciare che gli utenti li gestisce da soli.
  • save-update - quando l'oggetto viene salvato/aggiornato, controllare le associazioni e salvare/aggiornare qualsiasi oggetto che lo richiede (incluso salvare/aggiornare le associazioni nello scenario molti-a-molti).
  • eliminare - quando l'oggetto viene eliminato, eliminare tutti gli oggetti nell'associazione.
  • delete-orphan - quando l'oggetto viene eliminato, eliminare tutti gli oggetti nell'associazione. Inoltre, quando un oggetto viene rimosso dall'associazione e non associato a un altro oggetto (reso orfano), lo elimina anche.
  • tutti - quando un oggetto è salvato/aggiornamento/eliminazione, controllare le associazioni e salvare/aggiornare/eliminare tutti gli oggetti trovati.
  • all-delete-orphan - quando un oggetto viene salvato/aggiornato/eliminato, controllare le associazioni e salvare/aggiornare/eliminare tutti gli oggetti trovati. In aggiunta a ciò, quando un oggetto viene rimosso dall'associazione e non associato ad un altro oggetto (reso orfano), lo elimina anche.