如何在 EF Core 中设计仅指向一个方向的一对一关系



我正在尝试使用 EF Core 3 设计非常简单的数据库模型,但我在非常简单的关系方面遇到了问题。

我有课程:客户,文档和地址。

public class Customer
{
public int Id { get; set; }
public Address Address { get; set; }
}
public class Document
{
public int Id { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public string City { get; set; }
}

所以我想在不同的实体中使用通用地址。

我正在尝试通过以下方式对其进行建模:

public void Configure(EntityTypeBuilder<Customer> builder)
{
builder.HasKey(f => f.Id);
builder.HasOne(f => f.Address).WitMany().IsRequired().OnDelete(DeleteBehavior.Cascade);
}
public void Configure(EntityTypeBuilder<Document> builder)
{
builder.HasKey(f => f.Id);
builder.HasOne(f => f.Address).WitMany().IsRequired().OnDelete(DeleteBehavior.Cascade);
}
public void Configure(EntityTypeBuilder<Address> builder)
{
builder.HasKey(f => f.Id);
builder.Property(f => f.Street);
builder.Property(f => f.City);
}

但问题是,当我的文档附有地址并尝试删除该文档时,该地址不会被删除。出于某种原因,地址是文档的主体。

如何对这种关系进行建模?我不能在地址实体中使用导航属性,因为地址可以在多个不同的实体中用作地址的通用表示形式。

谢谢伊万指出这是不可能的。我会按照 Gerd 的建议使用自有类型。

最新更新