实体框架DeleteObject子项

Jer*_*emy 2 entity-framework

使用EF删除对象(及其子对象)的最佳方法是什么?我想只传递要删除的对象的id,并让EF句柄删除其依赖数据(外键数据).我是否必须首先根据id检索对象,然后调用"DeleteObject"?

Ale*_*mes 8

如果在数据库中配置了级联,则删除原则就足够了.

您可以在不查询数据库的情况下执行此操作,以使用如下的Stub实体获取要删除的内容:

var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
ctx.DeleteObject(stub);
Run Code Online (Sandbox Code Playgroud)

当然,如果有用于并发检查的引用或字段,那么这也不是全部故事.

另一方面,如果模型中只有级联删除(即数据库中没有级联),则需要首先获取内存中的所有依赖项,然后调用delete:

var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
stub.Dependendents.Load();
ctx.DeleteObject(stub);
Run Code Online (Sandbox Code Playgroud)

这只能起作用,因为EF问题(它期望的是)冗余删除以使ObjectContext与数据库中预期发生的事件保持同步.

希望这可以帮助

亚历克斯

PS我在MSDN博客上有关于此主题的一些提示.查看提示33(级联删除)和提示26(存根实体)