使用EF删除对象(及其子对象)的最佳方法是什么?我想只传递要删除的对象的id,并让EF句柄删除其依赖数据(外键数据)。我是否必须首先根据id检索对象,然后调用“DeleteObject”?
答案 0 :(得分:8)
如果您在数据库中配置了级联,那么删除原则就足够了。
您可以在不查询数据库的情况下执行此操作,以使用如下的Stub实体获取要删除的内容:
var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
ctx.DeleteObject(stub);
当然,如果有用于并发检查的引用或字段,那么这也不是全部故事。
另一方面,如果模型中只有级联删除(即数据库中没有级联),则需要首先获取内存中的所有依赖项,然后调用delete:
var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
stub.Dependendents.Load();
ctx.DeleteObject(stub);
这只能起作用,因为EF会发出冗余删除事件,以使ObjectContext与数据库中预期的内容保持同步。
希望这有帮助
亚历