c#,实体框架:更新/删除子项的最佳方法是什么?

时间:2013-01-27 19:15:14

标签: c# entity-framework concurrency

我有表A和表B:

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

我知道如果我在数据库中设置这个,我可以在cascada上删除,但是如果我没有在数据库中定义这个并且我想删除带有EF的子项,这是最好的方法吗?< / p>

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

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

所以我的问题是,如果我想用EF删除父及其所有孩子,这是最好的方法吗?最好的方法是尝试N次删除父级?当我获得好成绩时,这是一个不错的选择吗?

感谢。 Daimroc。

2 个答案:

答案 0 :(得分:1)

你已经回答了自己的问题。使用级联删除。您可以先使用EF代码启用它们,请参阅How do you ensure Cascade Delete is enabled on a table relationship in EF Code first?,或使用设计器将关系标记为级联。

答案 1 :(得分:0)

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