【问题标题】:Entity Framework Cascade Delete on multiple conditions实体框架级联删除多个条件
【发布时间】:2021-12-10 22:13:37
【问题描述】:

有这个实体:

public class Basket
{
    public int Id{ get; set; }

    [ForeignKey("Apple")]
    public int AppleId { get; set; }
    public Apple Apple { get; set; }

    [ForeignKey("Banana")]
    public int BananaId { get; set; }
    public Banana Banana { get; set; }

    [ForeignKey("Cherry")]
    public int CherryId { get; set; }
    public Cherry Cherry { get; set; }           
}

我这样命名它们只是为了给出一个具体的例子。

在“basket”表中,我将有 4 个不同的列,其中 3 个是“apple”、“banana”和“cherry”的 ID。我想设置一个 CASCADE DELETE 条件,如果这 3 个将被删除,那么行必须包含该 ID。

到目前为止,我无法完成它,因为“apple”、“banana”和“cherry”不包含“basket”的 ID。

谢谢。

【问题讨论】:

  • 这没有意义。一对多关系的“一”端不需要(根据定义,不能)包含关系“多”端的主键以启用级联删除。
  • 在这种情况下,“一”端应该是三个之一。 “篮子”是多头。并且这三个都不包含“多”端又名“篮子”的主键
  • 这只是三个标准的一对多关系。 “one”端不能包含“many”端的 ID。

标签: .net entity-framework asp.net-core entity-framework-core


【解决方案1】:

您正在描述一个实体,它是三个标准一对多关系的“多”端。

在 EF Core 的 fluent API 中:

modelBuilder.Entity<Basket>()
    .HasOne(b => b.Apple).WithMany().HasForeignKey(b => b.AppleId)
    .OnDelete(DeleteBehavior.Cascade);

modelBuilder.Entity<Basket>()
    .HasOne(b => b.Banana).WithMany().HasForeignKey(b => b.BananaId)
    .OnDelete(DeleteBehavior.Cascade);

modelBuilder.Entity<Basket>()
    .HasOne(b => b.Cherry).WithMany().HasForeignKey(b => b.CherryId)
    .OnDelete(DeleteBehavior.Cascade);

Cascade Delete - EF Core | Microsoft Docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多