Отношения «многие ко многим» и «один ко многим» с одними и теми же типами - PullRequest
1 голос
/ 05 апреля 2020

У меня есть проект приложения внутреннего обмена сообщениями. Бизнес-требования требуют двух типов адресов, простых текстовых адресов или кодов адресов, которые просто сокращенно используются для адресов. Вы можете подумать, что это имя оператора радиосвязи, но не так крипти c.

Кроме того, EF Core требует классов соединения для классов многие ко многим. Следовательно, отношение адреса усложняется.

Вот пример Message класса. Вы можете видеть, что Info обнуляется.

#nullable
public class Message
{
    public MessageAddress From { get; set; }
    public List<MessageAddress> To { get; set; }
    public List<MessageAddress>? Info { get; set; }
    public string Subject { get; set; }
    public string MessageBody { get; set; }
}

Вот класс отношений, о котором я упоминал.

public class MessageAddress
{
    public Guid MessageId { get; set; }
    public Message Message { get; set; }
    public Guid AddressId { get; set; }
    public Address Address { get; set; }
}

Вы можете видеть, что я создал класс Address для двух типы адресов, использующих перечисление. Я опустил перечисление для краткости. Вот код:

public class Address
{
    public string Address { get; set; }
    public Guid AddressId { get; set; }
    public AddressType AddressType { get; set; }  // Enum: PlainText, AddressCode
    public ICollection<MessageAddress> MessageAddresses { get; set; }
}

Вы можете видеть, что у меня есть одно отношение один ко многим и два отношения многие ко многим с одним и тем же типом собственных классов. На Add-Migration AddressUpgrade -Verbose я вижу это сообщение об ошибке:

System.InvalidOperationException: The type 'MessageAddress' cannot be configured as non-owned because an owned entity type with the same name already exists.

Я потерял около 3 часов. Что я могу сделать, чтобы правильно выполнить требование?

...