删除时无法将NULL插入列中

时间:2015-03-02 00:13:59

标签: c# entity-framework

我正在使用实体框架执行Remove()。当我尝试运行SaveChanges()时,我告诉我不能将NULL插入到不允许它的列中。这对我来说很奇怪,因为我没有做任何INSERT,我检查了30个现有条目中的每个条目,发现它不应该尝试在该列中保存带有null的表

以下是相关代码:

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();
    //...
}

1 个答案:

答案 0 :(得分:5)

请改为尝试:

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

这应该从gerund表中删除交叉引用实体以及它们链接在一起的两个实体之间的关系。

您尝试这样做的方式遇到错误的原因是因为EntityFramework认为您只是想删除关系而不删除相关实体。当EF执行此操作时,它会尝试将从属表中的外键列设置为NULL。解决这个问题的方法是通过更改UserId列值或删除表行来将表行与其他用户相关联,因为您无法将所需的列值设置为NULL。