多外键关联场景下使用Entity Framework实现级联删除的问题咨询
级联删除需求实现说明
需求可行性
你的需求完全可以实现。rentals 表作为关联customer和products的中间表,分别与两张主表存在外键关联,级联删除是关系型数据库外键的标准支持能力,完全匹配你的使用场景。
Entity Framework 配置要求
EF 默认不会自动为所有外键关系开启级联删除,你需要手动完成对应配置,根据开发模式的不同,配置方式分为两类:
- Code First 模式
推荐使用Fluent API在DbContext的OnModelCreating方法中配置,示例代码如下:
如果你使用的是Entity Framework 6(非Core版本),只需将上述代码中// 配置Customer到Rentals的级联删除 modelBuilder.Entity<Rental>() .HasOne(r => r.Customer) .WithMany(c => c.Rentals) .HasForeignKey(r => r.CustomerId) .OnDelete(DeleteBehavior.Cascade); // 配置Product到Rentals的级联删除 modelBuilder.Entity<Rental>() .HasOne(r => r.Product) .WithMany(p => p.Rentals) .HasForeignKey(r => r.ProductId) .OnDelete(DeleteBehavior.Cascade);.OnDelete(DeleteBehavior.Cascade)替换为.WillCascadeOnDelete(true)即可,配置完成后执行迁移更新数据库即可生效。 - Database First 模式
你需要先在数据库中为rentals表关联customer和products的两个外键分别设置ON DELETE CASCADE规则,之后更新EF数据模型,级联删除配置就会自动同步到EF上下文当中。
注意事项
你当前的场景不存在循环级联删除风险,配置完成后直接使用即可,无需额外处理冲突。
内容的提问来源于stack exchange,提问作者Glacierdk
相关产品推荐
相关产品推荐

