【问题标题】:c#, entity framwork: how is the best way to update/delete childs?c#,实体框架:更新/删除子项的最佳方法是什么?
【发布时间】:2013-01-27 19:15:14
【问题描述】:

我有A表和B表:

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

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

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

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

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

谢谢。 戴姆洛克。

【问题讨论】:

    标签: c# entity-framework concurrency


    【解决方案1】:

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

    【讨论】:

    • 是的,但在我的情况下,我不能使用级联删除,因为我在关系中有一个循环,而 SQL Server 不允许我这样做。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2012-01-08
      • 1970-01-01
      • 2010-09-09
      • 2022-10-15
      相关资源
      最近更新 更多