Таблица внешнего ключа / ассоциации к себе? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть стол, в котором хранится инвентарь для магазина, который выглядит следующим образом

InventoryId    int
ParentId       int
ShortDesc      int
...
[other product data]
...

В таблице будет существовать футболка с ParentId -1. Любые вариации размера и цвета будут присутствовать в одной таблице с исходным родительским InventoryID в поле ParentID.

EG

InventoryID   |ParentID   |ShortDesc
----------------------------------------------------    
111            -1          Skull TShirt
112            111         Skull TShirt Black Small
113            111         Skull TShirt Black Medium
114            111         Skull TShirt Black Large
115            111         Skull TShirt White Small

Возможно ли вообще указать какой-либо внешний ключ или ассоциацию, когда при использовании этой БД с Entity Framework у меня может быть свойство Navigation для этого объекта, которое будет перечислять все дочерние ресурсы инвентарного объекта?

1 Ответ

4 голосов
/ 27 сентября 2010

Да, это работает просто отлично.В качестве реального примера создайте модель базы данных Northwind с настройками по умолчанию и посмотрите на отношения между сотрудниками и руководителями.Entity Framework не получит автоматически имя свойства Supervisor, но сама Ассоциация работает, и вы можете переименовать свойство вручную.

Что касается вашего конкретного примера, я с подозрением отношусь к -1.Если это реальный первичный ключ реальной инвентарной записи, хорошо.Если это магическое значение, указывающее на отсутствие записи, либо используйте NULL, либо сделайте его реальной записью.Для того чтобы Entity Framework распознал эту связь, вам потребуется создать реальный внешний ключ базы данных, поэтому все значения должны фактически ссылаться на записи.

...