2009-08-31 67 views
2

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

回答

8

如果您在数据库中配置了级联,那么删除该原则应该足够了。

var stub = new Principal{ID = idToDelete}; 
ctx.AttachTo("PrincipalsEntitySetName", stub); 
ctx.DeleteObject(stub); 

当然这并不是故事的全部,如果有用于引用或字段:

你可以做到这一点无需查询数据库得到的东西来使用存根实体像这样被删除并发检查你也需要这些。

如果在另一方面,你只能有一个级联模型中删除(即没有在数据库中没有级联),你需要先获得内存中的所有家属,然后调用删除:

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

这只适用于EF问题(它期望的)冗余删除以保持ObjectContext与其预期在数据库中发生的同步。

希望这有助于

亚历

PS我对这个话题有些tips我的MSDN博客。检出tip 33(级联删除)和tip 26(存根实体)