mar*_*are 13 entity-framework entity-framework-4
删除EF实体的所有集合项的正确方法是什么?在下面的代码中,DocumentItems是文档的相关文档项的集合.此代码在Clear()上进行,但在SaveChanges()上失败,因为相关项通过FK连接到其文档,FK是必需的.所以我猜他们在Clear()之后没有外键的情况下仍然悬浮在空中.
我是否通过在每个项目上调用Remove()的集合上的foreach循环来解决这个问题,还是有另一种方法?
// remove existing document items to prepare for refreshing them
existing.DocumentItems.Clear();
// adds new Document Items
PrepareInvoice(existing, collection);
_repository.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
Bri*_*izo 13
这是删除集合中项目的一种方法.
VB
TEntityCollection.ToList().ForEach(Sub(o) ctx.DeleteObject(o))
Run Code Online (Sandbox Code Playgroud)
C#
TEntityCollection.ToList().ForEach(x => ctx.DeleteObject(x))
Run Code Online (Sandbox Code Playgroud)
然后你需要打电话
ctx.SaveChanges()
Run Code Online (Sandbox Code Playgroud)
Nix*_*Nix 11
Clear只删除引用,但不删除entiy.
在你的情况下
existing.DocumentItems.Clear();
Run Code Online (Sandbox Code Playgroud)
EntitySet中的所有DocumentItem都将被清除,但您必须删除/删除实际的DocumentItem或提交失败,就像您尝试在数据库中删除它一样.
你需要循环遍历任何引用,然后删除你想要删除的实体(除非它可以为空,在你的情况下它不是)
或者,我已经看到使用clear的实现,以及一个AssociationChangedHandler来自动删除旧对象.基本上,如果更改是"删除/删除",则它会调用孤立对象上的DeleteObject().