Elimina in hasmanytomany.
Domanda
Ho tre tavoli - 1. Anomalia 2. Markup. 3. anomaly_markup
Mappatura -
public AnomalyMap()
{
Table("anomaly");
Id(x => x.Id).Column("ID").CustomType("decimal");
HasManyToMany<DMMarkupData>(x => x.DMMarkupData)
.Table("anomaly_markup")
.ParentKeyColumn("ANOMALY_ID")
.ChildKeyColumn("MARK_UP_ID")
.Cascade.All()
.LazyLoad();
}
public MarkupDataMap()
{
Table("markup");
Id(x => x.Id).Column("ID");
}
.
Condizione:
- .
- Salva i dati di anomalia - Anomaly contiene MarkUpdata.Salva i dati.È funzionalità di lavoro con me.
- Elimina markup - che dovrebbe eliminare la relazione dal tavolo della mappa e dai dati di markup.Sto affrontando questo problema.
Chiunque mi aiuti a scoprire la soluzione, come eliminare i dati di markup?
Soluzione
Non vedo alcuna relazione di markupdata con anomalia.Ci deve essere la stessa relazione e dovresti specificare il controllo dell'operazione cascata utilizzando l'attributo inverso nella tua mappatura. È possibile fare riferimento: Come impostare "Cascade Elimina "Opzione per" Set Null "in fluente Nibernate?
Per eliminare DMMARKUPDATA rimuovere semplicemente l'oggetto dalla raccolta e chiamare per salvare anomalia.
Altri suggerimenti
Da quello che hai pubblicato sembra che tu non abbia definito una relazione su DMMARKUPDATA -> anomalia, quindi Nibernate non saprete per eliminarla le voci di markupdata dalla tabella anomalia_markup (nonostante il rapporto inversa sia lì).Puoi risolverlo con una cascata di livello di database che rimuove le voci in anomalia_markup durante l'eliminazione di markupdata, oppure è possibile mappare la relazione nel codice e nibernate e poi Nibernate farà la cascata per te.
Nibernate non gestisce il grafico dell'oggetto, lo persiste solo. Rimozione dell'articolo dall'elenco quando viene eliminato è Responsabilità della logica aziendale !
(tutti i trucchi con trigger e roba che la soluzione alternativa porta a incongruenze e effetti collaterali all'interno della transazione che fa il cambiamento. Dal punto di vista dell'ignoranza dell'ignoranza non è raccomandato. Lo farei solo quando affronterà problemi di prestazioni non può essere risolto in un altro modo.)
Puoi semplificarlo utilizzando Components . A condizione che
- .
- Non fai riferimento a stesso markup da qualche altra parte
- Non è necessario interrogare per il markup non correlato all'anomità
- i markups non vivono mai al di fuori di un'anomità
Dato tutto ciò, è molto più facile lavorare con i componenti. (Non so come viene chiamato fluente, ma in XML Mapping è chiamato "composito-element").
Quando si utilizzano i componenti, non è necessario eliminare il markup dal database. Lo rimuovi dalla lista in cui vive.