级联删除EF核心和交叉表

时间:2018-03-20 21:39:43

标签: c# .net database entity-framework-core

我有一个地址模型,它用于我系统中的所有模型,如下所示:

class Person
{
    public IList<PersonAddress> PersonAddresses { get; set; }

    public Person()
    {
        PersonAddresses = new List<PersonAddress>();
    }
}

class PersonAddress
{
    public int PersonId { get; set; }
    public Person Person { get; set; }

    public int AddressId { get; set; }
    public Address Address { get; set; }
}

class Address 
{
   //...
}

并在OnModelCreating:

builder.Entity<PersonAddress>()
            .HasKey(pa => new { pa.PersonId, pa.AddressId });

它的作品非常好!我唯一的问题是关于级联删除。我如何设置此方案:

  • 删除Person时,级联删除PersonAddress和Addresses
  • 删除地址时,级联删除PersonAddress而不是Person

目前我看到删除Person会删除PersonAddress(但不会删除相关地址)。

我没有抱怨这种行为,但我不清楚我如何设置自动级联删除实体,因为我需要手动执行删除。

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

WillCascadeOnDelete(true)WillCascadeOnDelete(false)扩展名与流畅的api。

一起使用
builder.Entity<PersonAddress>()
            .HasKey(pa => new { pa.PersonId, pa.AddressId })
            .WillCascadeOnDelete(true);