【问题标题】:Cascading delete in Entity Framework实体框架中的级联删除
【发布时间】:2025-12-17 10:15:02
【问题描述】:

所以我有两个表,Invoices 和 InvoiceItems。当我删除一个 Invoice 时,我希望所有相关的 InvoiceItem 也被删除。

我在删除发票时更新了 SQL Server 中的关系以进行级联删除。然而,Entity Framework 没有识别出这种变化,但我读到我需要手动更新我的 EDMX 来执行级联删除。

在我的 EDMX 的设计视图中,我点击了两个表之间的关系,并检查了属性以尝试设置我的级联删除

如您所见,有两个 OnDelete 属性:End1 OnDelete 和 End2 OnDelete

我需要将哪个设置为 Cascade?​​p>

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-4


    【解决方案1】:

    我最初也对此感到困惑,原因是我不确定它是字段 Navigation Property 还是字段 Role Name这描述了一个末端代表什么对象,使得答案无效。

    答案是角色名称字段描述了结束。

    因此,如果我们知道要在相关发票被删除时删除 Invoice 的所有 InvoiceItems,我们可能知道我们应该将 OnDelete 设置为发票,要查找关系中代表发票的特定端,请搜索角色名称为“发票”的端。在上面的例子中,就是 End1。

    如果您知道,这可能很明显,但如果您不知道,则不会。

    【讨论】:

    • 我看到您编辑了您的帖子,说上面的 End2 是角色名称“发票”。那不应该是End1吗?
    • @KyleW 哦,天哪,你当然是对的。感谢您通知我。
    【解决方案2】:

    如果 End1 是关系的主体(即具有发票项目的发票),那么级联删除是有意义的。

    【讨论】: