【发布时间】:2018-08-29 21:02:52
【问题描述】:
我有一个地址模型,它用于我系统中的所有模型,如下所示:
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 });
它的工作非常好!我唯一的问题是关于级联删除。我如何设置这个场景:
- 删除人员时,级联删除人员地址和地址
- 删除地址时,级联删除 PersonAddress 而不是 Person
目前我看到删除 Person 会删除 PersonAddress(但不会删除相关的地址)。
我没有抱怨这种行为,但我不清楚如何设置自动级联删除我想要的实体,或者我是否需要手动执行删除。
感谢您的宝贵时间!
【问题讨论】:
-
删除人员时确定要删除地址吗?那个地址不能有多个人吗?如果没有,则不需要创建多对多关系。
-
@Tim 我理解你,但有 1 个人有 N 个地址,我还有其他与 Address 相关的实体。例如,Customer、CustomerAddress、Vendor、VendorAddress 等...所有实体共享同一个 Address 实体。
-
但不能
Customer、Person和Vendor都只有List<Address>? -
@Tim 然后 EF Core 将为每个表创建一个表,例如 CustomerAddress、PersonAddress 和 VendorAddress。我只希望一个表“地址”中的所有地址
-
有一些方法可以解决这个问题,例如将
PersonId替换为Address类中的通用EntityId,并映射到每种不同类型的用户实体。
标签: c# .net database entity-framework-core