使用多个外键级联删除
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 然后起作用 - 任何删除都会触发导致预期数据被删除的触发器。
【讨论】:
以上是关于使用多个外键级联删除的主要内容,如果未能解决你的问题,请参考以下文章