Domanda

Scusate se questa è una vittima, non riusciva a trovare lo sbagliando di poco davvero sapere cosa cercare, in ogni caso ...

Ho tre classi, Parent, Child e Other

Parent ha molti Child in cui bambino ha una colonna Parent_Id

Other contiene un riferimento a un Child attraverso una colonna Child_Id

Quando si elimina un Parent, voglio anche eliminare tutti gli oggetti Child associati. Se questi oggetti Child fanno riferimento tutte le classi Other, voglio che loro (gli oggetti Other) riferimenti Child_Id per essere annullate.

Quali regole a cascata ho bisogno sulle due relazioni?

Inoltre, la volontà NHibernate aggiornamento entità in-memory, nonché nel database?

vale a dire. se ho un po 'di Parent, Child e Other in memoria (cioè caricati da db, non transitorio) e dire NH per eliminare un Parent, che cosa accadrà? Presumo gli oggetti Parent e Child diventeranno transitoria? Cosa succederà alla proprietà Child di tutti gli oggetti Other?

Edit: quando si utilizza All-Delete-Orfano, quali classi un oggetto come un orfano? Nell'esempio di cui sopra, è un Child orfano se Parent genitore viene eliminato? Fa il riferimento dalla materia Other quando si considera un'entità come orfano?

Grazie

È stato utile?

Soluzione

NH non aggiorna le tue entità in memoria (ad eccezione di Ids e versioni). NH non è responsabile per la gestione dei rapporti di voi entità. Persiste solo quello che hai fatto in memoria al database.

Da questo punto di vista dovrebbe diventare più facile da capire.

cascade="delete" significa che quando il genitore viene eliminato, il bambino viene eliminato pure. mezzi cascade="delete-orphan", che in aggiunta, il bambino è anche eliminati se nessun riferimento genitore più. Questo, naturalmente, funziona solo se il bambino è nella sessione.

L'istanza viene eliminata transitoria in memoria. I riferimenti al grado transitorio (da Other) causerà un'eccezione. Per quanto ne so, è necessario rimuovere riferimento a casi cancellati da soli. Probabilmente si può rendere implicita da parte di alcuni trucchi, ma dubito che questo sarà pulito. E 'la logica di business.

Per le relazioni tra genitori e figli, cascade="all-delete-orphan" è appropriato.

Per avere un riferimento regolare preferisco cascade="none".

C'è un grande spiegazione da Ayende Rahien

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top