Потому что ваши отношения определены в обратном порядке.У вас должно быть 1 на Person
и 0..1 на Telecom
, чтобы указать, что Person
- это принципал, который может иметь один или ноль телефонов.В своем отображении вы говорите, что Telecom
является основным, который может иметь одного или ноль человек, но человек должен иметь Telecom
.Это также приведет к обратной проблеме из-за неправильного отображения.У вас есть шесть отношений один-к-одному с Telecom
, но если вы отмените их по требованию, вы скажете, что все шесть отношений (все шесть FK в Telecom
) будут НЕ равны NULL = каждая запись должна участвовать во всехшесть отношений.
Отношение один-к-одному является очень особенным и должно использоваться редко.Вместо этого у вас должно быть отношение «один ко многим» от Person
до Telecom
с новым столбцом в Telecom
, указывающим тип.
При использовании отношения «один к одному» необходимо иметь FK в зависимомтаблица настроена с уникальным индексом.EF не поддерживает уникальные индексы, поэтому, когда вы сначала моделируете отношение «один к одному» в модели, оно все равно остается в базе данных «один ко многим», и если база данных используется другим приложением, это может нарушить работу вашего приложения.
Также избегайте ненужного наследования.Вам нужно Person
как отдельная сущность?= есть ли экземпляр, который является только человеком, а не сотрудником?Есть ли более производные типы от человека?Если нет, вам не нужен человек, и если да, это еще не значит, что базовый человек - хорошая идея.То же самое относится и к работнику.Наследование имеет свои собственные правила в EF, и при первом использовании модели оно по умолчанию создает наследование TPT = худшее из-за того, что оно приводит к очень сложным и медленным запросам к базе данных.