Как спроектировать отношения один-к-одному в EF Core, которые указывают только в одном направлении - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь создать очень простую модель базы данных с EF Core 3, но у меня возникают проблемы с очень простыми отношениями.

У меня есть классы: Customer, Document и Address.

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; }
}

Итак, я хочу использовать адрес generi c в разных сущностях.

Я пытаюсь смоделировать его следующим образом:

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, поскольку Address может использоваться в нескольких различных объектах в качестве обобщенного c представления адреса.

1 Ответ

0 голосов
/ 02 февраля 2020

Спасибо, Иван, за то, что указал, что это невозможно. Я буду следовать совету Герда, чтобы использовать принадлежащий тип.

...