У меня есть две ситуации, когда я хотел бы что-то подобное.В моей модели у меня есть Message
, который относится к одному или двум Persons
.Кроме того, сообщение имеет связь с двумя Addresses
, то есть a от Address
и a до Address
.
В первой ситуации с двумя Persons
я хотел бы указать связь между Message
и Person
кратностью 1 --- 1..2 или указать две ассоциации, одна с 1--- 1 и другой с 1 --- 0..1.Однако я не могу (или не знаю, как) установить кратность в два.Я могу себе представить, что можно установить 1 - * с ограничением максимум 2 (однако я не знаю, как это сделать).
Добавляя две ассоциации, я чувствую себя немного странно, когдаЯ смотрю на сторону Message
, потому что обе ассоциации имеют там 1, что указывает на то, что Person
должно иметь два Messages
, связанных с ним.Я мог бы захотеть что-то вроде 0..1 на стороне Message
для обеих ассоциаций с ограничением xor на них или что-то в этом роде, но я не знаю, является ли это хорошей практикой или вообще возможно в EF.
Для второй ситуации проблема довольно схожа, за исключением того, что всегда есть значение от Address
и всегда от а до Address
.Установка кратности 1 - * не кажется мне подходящей.Здесь я бы предположил, что определенно должно быть две ассоциации, от и до ассоциации (которые случаются с обеими сущностями Address
).Это, однако, приводит к той же проблеме на стороне Message
с двумя 1 или двумя 0..1.
Так что мой вопрос, как мне правильно смоделировать этов EDM?
Заранее спасибо.
Обновление 1:
Чтобы прояснить вопрос, я дам небольшую справочную информацию о том, зачем мне нужна такая модель.Я должен быть в состоянии создать сообщение.В этом сообщении я должен указать, касается ли это одного или двух человек.Из этих лиц я указываю имя, фамилию и некоторые другие неуникальные свойства (два человека могут иметь одно и то же имя).Я мог бы сбросить все эти свойства в сущности Message
(fname1, lname1, fname2, lname2), но это кажется плохой идеей.Следовательно, сущность Person
родилась.Однако это может выглядеть так, как будто Person
может быть связано со многими сообщениями, но это не так.Там могут быть два разных человека с одинаковыми свойствами.Невозможно определить, являются ли эти люди на самом деле одним и тем же человеком в реальной жизни или нет.
В случае адресов имеет место аналогичный аргумент.Два адреса могут быть написаны немного по-разному, но если я напишу их в письме и отправлю по почте, они оба прибудут в одно и то же место (например, sesamestreet или sesamestr.).Поэтому у меня нет одного Address
объекта, подключенного к нескольким Messages
.Опять же, единственная причина Address
- это отдельная сущность, потому что у меня есть два из них с одинаковыми свойствами. С точки зрения проектирования базы данных это может не иметь смысла, с точки зрения диаграммы классов это может иметь немного больше смысла.У меня сложилось впечатление, что EDM в EF должен быть не похож на дизайн базы данных, а скорее на модель предметной области, поэтому я надеюсь, что поступил правильно.
Обновление 2:
Iпросто подумал о том, что я думаю, может быть лучшим способом в этом случае.Поскольку между Person1
и Person2
практически нет различий, я чувствую, что связь между Message
и Person
1 .. * приемлема.Тот факт, что многие означают два, будет чем-то для нижних уровней.В случае адреса, от и до весьма различны.Они оба адреса, но я не чувствую, что могу составить их список.Я мог бы разделить from и address на отдельные объекты и позволить им наследовать от Address
.Затем свяжите Message
с каждым из подклассов.Это может показаться немного излишним, но вы можете предположить, что адрес отправителя в какой-то момент может иметь другие требования, чем адрес, и, следовательно, другие свойства.
Я не на 100% доволен, хотя (особенно с адресной частью).Это решение может быть или не быть в порядке, но я чувствую, что оно позволяет избежать основной проблемы.