C#,实体框架:更新/删除子项的最佳方法如何

本文关键字:最佳 方法 删除 实体 框架 更新 | 更新日期: 2023-09-27 17:56:09

我有表 A 和表 B:

TableA(IDTableA,...) TableB(IDTableB, IDTableA,...)

我知道如果我在数据库上设置它,我可以在 cascada 上删除,但是如果我没有在数据库中定义它并且我想使用 EF 删除子项,这是最好的方法?

想象一下这种情况:用户 A 将父项添加到上下文中

,用户 A 将子项添加到上下文中,将父项和子项标记为已删除并保存更改。但是,如果用户 B 在用户 A 加载子项并确认更改之间添加新子项,则不会删除用户 B 添加的新子项,或者由于引用完整性而出现异常。

我尝试使用事务,将父项设置为已删除,然后,在下一步中,当我进行savechanges时,父寄存器被锁定,因此其他用户无法加载。但问题是相同的,其他用户可以在父级之间进行更改,父级正在加载和保存更改。

所以我的问题是,如果我想使用 EF 删除父项及其所有子项,哪种方法是最好的方法?最好的方法是尝试N次删除父级?当我想要一个好的表现时,这是一个不错的选择吗?

谢谢。戴姆罗克。

C#,实体框架:更新/删除子项的最佳方法如何

你已经回答了自己的问题。 使用级联删除。可以先使用 EF 代码启用它们,请参阅如何确保首先在 EF Code 中的表关系上启用级联删除?,或者通过将关系标记为级联来使用设计器。

在这种特殊情况下,我认为最好的方法是使用触发器删除 de childs。