Самостоятельные отношения и структура сущностей - PullRequest
3 голосов
/ 01 мая 2011

Я хотел бы иметь сущность, которая может иметь ребенка (один или ноль). Этот ребенок того же типа, что и родитель. Я не уверен, как установить структуру сущности, потому что я хотел бы иметь два свойства навигации для каждой сущности. Один для навигации к ребенку и один для навигации к родителю. По сути, это та же структура, что и у двусвязного списка.

Я думаю, что этой структуры таблицы должно быть достаточно:

 int | id       | PK
 int | id_next  | FK
text | data

Но как мне создать навигационные свойства для следующих / предыдущих элементов? Я могу создать только свойство навигации для следующего элемента.

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 23 января 2012

Вы можете сделать это в EF4, указав отношение 0..1 -> 0..1 на объекте. Назовите одно из свойств навигации «Назад», а другое - «Далее». Это создаст скрытое поле в базовой БД.

Я не проверил полностью этот подход, но, похоже, он работал при создании сценария базы данных.

2 голосов
/ 01 мая 2011

Вы не можете. Проблема здесь в том, что отношение один-к-одному имеет очень специфическое требование - значение FK должно быть уникальным во всей таблице. Если уникальность не обеспечена, вы можете добавить вторую сущность, указывающую на того же родителя, и у вас будет отношение один ко многим.

Чтобы применить это в самореферентных отношениях, как вы описали в своем примере, вы поместите уникальный индекс на id_next, и он будет работать на SQL-сервере. Проблема в том, что структура сущностей не поддерживает уникальные ключи. Из-за того, что структура сущностей способна строить взаимно-однозначные отношения только между двумя разными типами сущностей, где FK в зависимом типе сущности также является его PK (единственный способ заставить FK быть уникальным) = обе сущности имеют одинаковые ПК значение. Это не может работать с самореферентным отношением, поскольку в одной таблице нельзя иметь два одинаковых значения PK.

0 голосов
/ 19 августа 2011

Исследовательские древовидные структуры в Entity Framework. Вы в основном хотите вертикальное дерево (то есть одна ветвь). Фреймворк не будет применять только одну ветвь, но вы можете управлять этим в своей бизнес-логике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...