使用多个外键级联删除

Posted

技术标签:

【中文标题】使用多个外键级联删除【英文标题】:Cascading deletes with multiple foreign keys 【发布时间】:2021-12-10 12:29:10 【问题描述】:

我正在编写一个使用实体框架来处理我的数据库的应用程序。

我的数据库设计如下所示:

我想使用级联删除,所以当“customer”表中的客户被删除时,“rentals”表中的相应行也会被删除。

反之亦然,每当从“产品”表中删除产品时,租金中的相应行也会被删除。

这可能吗?

如果是这样,当启用级联删除时,Entity Framework 是否将其设置为自动?还是我需要手动配置?

【问题讨论】:

" 每当从“产品”表中删除产品时,租金中的相应行也会被删除。” - 这不是一个好的设计!出于显而易见的原因...不要删除产品。具有 isEnabled 标志或使用到期日期范围。拥有产品的公司和拥有公司的客户似乎也很奇怪。 【参考方案1】:

这可能吗?

是的。如何 - 稍后。

如果是这样,实体框架在级联删除时是否将其设置为自动 启用了吗?

没有。 SQL Server 无法使用外键约束来处理它——只允许一个更新/删除路径。这是一个严重的限制,但可以通过一些代码来解决。

使用触发器可以做什么。 INSTEAD OF(代替delete,执行触发器),并且在触发器中可以删除两个相关的表,然后删除原来的数据。

EF 然后起作用 - 任何删除都会触发导致预期数据被删除的触发器。

【讨论】:

以上是关于使用多个外键级联删除的主要内容,如果未能解决你的问题,请参考以下文章

python django中的orm外键级联删除

mysql外键级联更新删除

依赖外键级联不好吗?

MySQL约束 主键约束丨唯一约束丨非空约束丨外键级联

dbeaver如何进行级联删除和修改

Django级联删除反向外键