2015-03-02 12 views
6

Sto eseguendo un Remove() utilizzando Entity Framework. Quando provo a eseguire SaveChanges(), mi viene detto che non posso inserire NULL in una colonna che non lo consente. Questo è strano per me, dal momento che non sto facendo alcun INSERT e ho controllato ognuna delle 30 voci esistenti per scoprire che non dovrebbe cercare di salvare la tabella con null in quella colonna.Impossibile INSERIRE NULL nella colonna in Rimuovi

Ecco il codice in questione:

var user = db.AspNetUsers.FirstOrDefault(u => u.Id == userId); 
if (user != null) 
{ 
    var itemsToRemove = user.ItemXrefs.Where(i => !itemIDs.Contains(i.ItemID)).ToList(); 

    foreach (var xref in itemsToRemove) 
    { 
     user.ItemXrefs.Remove(xref); 
    } 

    db.SaveChanges(); 
    //... 
} 
+0

è possibile fornire l'eccezione effettiva e le classi POCO coinvolte? Si tratta dell'errore che si verifica sull'entità da cui viene cancellata o un'entità correlata? – Kritner

+0

È un po 'di confusione che stai interrogando 'user.ItemXfefs' e poi rimuovendo i risultati da' user.Items'. Non dovresti rimuovere oggetti dalla stessa collezione che stai richiedendo loro? O almeno verificando che 'user.Items' contenga l'elemento che stai rimuovendo? –

+0

@RufusL Questo è stato un errore durante la semplificazione del mio codice per questa domanda - risolto. – muttley91

risposta

5

Prova a modificare:

itemXrefSet = db.Set<ItemXref>(); 
foreach (var xref in itemsToRemove) 
{ 
    itemXrefSet.Remove(xref); 
} 
db.SaveChanges(); 

Questo dovrebbe eliminare il riferimento incrociato entità dalla tabella gerundio così come il rapporto tra le due entità si collega insieme.

Il motivo per cui si è verificato un errore nel modo in cui si è tentato di farlo era perché EntityFramework pensava di voler rimuovere la relazione senza rimuovere l'entità correlata. Quando EF esegue questa operazione, tenta di impostare la colonna della chiave esterna nella tabella dipendente su NULL. La soluzione consiste nel correlare la riga della tabella con un altro utente modificando il valore della colonna UserId o eliminando la riga della tabella, poiché non è possibile impostare un valore di colonna richiesto su NULL.

+0

Grazie, l'ha fatto! – muttley91

Problemi correlati