以下是我要删除对象的代码片段:
var foo = this.repository.GetFoo();
foreach (var item in foo.RelatedItems.ToList()) {
if (x == y) {
//Update happens here; this isn't executing however.
} else {
//This code block is executed; this is where I am telling the context to mark this object for deletion.
foo.RelatedItems.Remove(item);
}
}
this.repository.Save();
当调用.Save()
时,我收到一个错误:“无法将值插入列”。我使用分析器来查看实际执行的SQL是什么,它是:
update dbo.RelatedItems
set foreignKey = null
where id = X
我希望在这里执行delete语句,但是,由于某种原因,它试图通过将外键设置为null来更新记录。
修改
我将以下代码添加到我的存储库类中以解决此问题:
public void DeleteItem(Item item) {
context.Entry(item).State = System.Data.EntityState.Deleted;
}
答案 0 :(得分:0)
请参阅此相关问题:EF 4: Removing child object from collection does not delete it - why?
显然Remove
和Delete
之间存在语义差异,其中Remove
只会通过删除外键孤立行,而Delete
实际上会将记录删除该表。
其他问题的用户vittore
建议
dbcontext.DeleteObject(item);
在循环中。