如何在 EF Core 中设计仅指向一个方向的一对一关系
How to design one to one relationship in EF Core that points only in one direction
我正在尝试使用 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);
}
但问题是,当我的文档附有地址时,我尝试删除该文档时,地址不会被删除。出于某种原因,地址是文档的主体。
如何建立这种关系的模型?我不能在 Address 实体中使用导航 属性,因为 Address 可以在多个不同的实体中用作地址的通用表示形式。
谢谢 Ivan 指出这是不可能的。我会听从 Gerd 的建议使用自有类型。
我正在尝试使用 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);
}
但问题是,当我的文档附有地址时,我尝试删除该文档时,地址不会被删除。出于某种原因,地址是文档的主体。
如何建立这种关系的模型?我不能在 Address 实体中使用导航 属性,因为 Address 可以在多个不同的实体中用作地址的通用表示形式。
谢谢 Ivan 指出这是不可能的。我会听从 Gerd 的建议使用自有类型。