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:

    .
  1. Salva i dati di anomalia - Anomaly contiene MarkUpdata.Salva i dati.È funzionalità di lavoro con me.
  2. 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?

È stato utile?

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.

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