70 messaggi dal 12 settembre 2010
Ciao a tutti,
sto avendo un problema molto strano durante la cancellazione di un record dal DB (sto utilizzando Entity Framework).

Ho una classe "Categorie" (mappata con la rispettiva tabella) e relazionata (1:N) con la classe "Documenti".

Se tento di cancellare una riga dalla tabella "Categorie" ottengo questo errore:

InvalidOperationException: The property 'IdCategoria' on entity type 'Categorie' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key first delete the dependent and invoke 'SaveChanges' then associate the dependent with the new principal.


La action che esegue il comando è questa:

public async Task<IActionResult> Delete(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            Categorie Categoria = await _db.Categorie.Where(w => w.IdCategoria == id).FirstOrDefaultAsync();

            if (Categoria == null)
            {
                return NotFound();
            }
            else
            {
                _db.Categorie.Remove(Categoria);
                await _db.SaveChangesAsync();
            }

            return RedirectToAction(nameof(Index));
        }


L'errore è davvero strano perchè ho realizzato la stessa action tra per un altra classe (relazionata sempre 1:N con la classe "Documenti") e la cancellazione avviene senza nessun problema.

Spero che qualcuno possa aiutarmi.

Grazie mille!!!
333 messaggi dal 05 novembre 2012
Ciao,

se per la categoria che stai cancellando ci sono record nella tabella documenti e nella relazione il cascade delete non è configurato è corretto che ti venga restituito l'errore.

In tal caso attenzione a come configuri il cascade delete, oltre alla categoria vengono cancellati anche i documenti correlati

E' probabile che l'altra entità (relazionata a categorie) che hai cancellato, in quel momento non aveva record documenti correlati.

/Ciao

Alessio
70 messaggi dal 12 settembre 2010
Ciao,
il cascade delete è configurato su SetNull...ma ripeto c&#8217;è anche un altra classe relazionata sempre a questa classe &#8220;Documenti&#8221; allo stesso modo e li non ho problemi ad eseguire le operazioni di cancellazione.

Qui invece mi sta dando questo errore...sto quasi pensando di cancellare manualmente la tabella associata a questa classe che mi sta dando problemi e di crearla di nuovo ma senza passare per le migration.
333 messaggi dal 05 novembre 2012
Gargano10041983 ha scritto:

...ma ripeto c&#8217;è anche un altra classe relazionata sempre a questa classe &#8220;Documenti&#8221; allo stesso modo e li non ho problemi ad eseguire le operazioni di cancellazione.


Se tenti di cancellare un record di quella tabella e per questi ci sono associati dei record nella tabella documenti è impossibile che ti permette la cancellazione a meno che sulla relazione non c'è configurato il cascade delete

E questo non è un comportamento che riguarda solo MySql ma i database relazionali ed aggiungo che non è un problema di ef perchè se fai la stessa operazione direttamente su db la situazione non cambia

Per il record che hai cancellato con successo sei sicuro che nella tabella documenti non c'era nessun record correlato?

UPDATE: giusto per avere dei punti certi sul quale ragionare, fai anche il controllo sulla categoria che stai tentando di cancellare, ci sono dei record nella tabella documenti correlati?

/Ciao
Modificato da scioCoder il 15 marzo 2019 19:23 -
Modificato da scioCoder il 15 marzo 2019 19:28 -

Alessio
70 messaggi dal 12 settembre 2010
Ciao,
su questa tabella principale chiamata Documenti ci sono tre tabelle relazionate (relazione 1:N per tutte e tre verso questa).

Tramite il modelBuilder ho impostato la relazione e per la cancellazione ho specificato il DeleteBehavior su SetNull...ora per due di queste tre tabelle riesco a cancellare senza nessun problema mentre quest&#8217;ultima mi sta generando questo errore...il mio intento è che se cancello qualche record in una di queste tre tabelle nella tabella principale Documenti non devono cancellarsi dei record...

A questo punto sicuramente sto sbagliando qualcosa ma cosa?!? Xke due casi su tre funzionano (sia se c&#8217;è qualche elemento relazionato e sia se non c&#8217;è)...non capisco cosa mi sfugge...
333 messaggi dal 05 novembre 2012
Sicuramente c'è qualcosa che non è stato configurato correttamente...cerchiamo di capire cosa

Prova a postare solo le righe di codice usate per la configurazione delle relazioni

Fai anche un controllo sul db...le tre relazioni risultano configurate nello stesso modo?

/Ciao

Alessio
333 messaggi dal 05 novembre 2012
Ciao,

ho capito dove è il problema...

nella tabella documenti il campo IdCategoria è obbligatorio mentre per le altre due relazioni il campo Idxxx è nullable

/Ciao

Alessio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.