0

我有表 A 和表 B:

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

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

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

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

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

谢谢。戴姆洛克。

4

2 回答 2

1

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

于 2013-01-27T19:23:59.653 回答
0

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

于 2013-01-28T12:22:12.247 回答