2015-03-02 13 views
6

Wykonuję Remove() przy użyciu Entity Framework. Kiedy próbuję uruchomić SaveChanges(), powiedziano mi, że nie mogę wstawić NULL do kolumny, która na to nie pozwala. Jest to dla mnie dziwne, ponieważ nie robię żadnego INSERT i sprawdziłem każdą z 30 istniejących pozycji, aby stwierdzić, że nie powinno się próbować zapisywać tabeli z wartością null w tej kolumnie.Nie można wstawić wartości NULL do kolumny przy usuwaniu

Oto kod w pytaniu:

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

Czy możesz podać rzeczywisty wyjątek i klasy POCO? To błąd występujący w jednostce, która jest usuwana z lub podmiotu powiązanego? – Kritner

+0

To trochę mylące, że pytasz 'user.ItemXfefs', a następnie usuwasz wyniki z' user.Items'. Nie powinieneś usuwać przedmiotów z tej samej kolekcji, o którą pytasz? Lub przynajmniej sprawdzanie, czy element 'user.Items' zawiera usuwany element? –

+0

@RufusL To był błąd podczas upraszczania mojego kodu dla tego pytania - naprawiłem to. – muttley91

Odpowiedz

5

Spróbuj to zamiast:

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

Należy usunąć odsyłaczy podmiot z tabeli Gerund jak również relacje między tymi dwoma podmiotami łączy się ze sobą.

Powodem, dla którego wystąpił błąd w sposób, w jaki próbowałeś to zrobić, było to, że EntityFramework uznał, że chcesz usunąć relację bez usuwania powiązanego obiektu. Gdy EF robi to, próbuje ustawić kolumnę klucza obcego w tabeli zależnej na NULL. Aby obejść ten problem, należy powiązać wiersz tabeli z innym użytkownikiem, zmieniając wartość kolumny UserId lub usuwając wiersz tabeli, ponieważ nie można ustawić wymaganej wartości kolumny na wartość NULL.

+0

Dzięki, to się stało! – muttley91

Powiązane problemy