2

J'ai une table qui stocke l'inventaire pour un magasin qui ressemble à ceciTable clé étrangère/association à elle-même?

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

Un TShirt existera dans le tableau avec un ParentId de -1. Toutes les variations de taille et de couleur existeront dans la même table avec le parent InventoryID d'origine dans le champ 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 

Est-il possible que je puisse spécifier une sorte de clé étrangère ou d'association et quand j'utilise cette base de données avec Entity Framework, je peux avoir une propriété de navigation sur cette entité qui liste tout l'inventaire des enfants d'une entité d'inventaire?

Répondre

4

Oui, cela fonctionne très bien. Pour un exemple concret, créez un modèle de base de données Northwind avec les paramètres par défaut et examinez la relation superviseur employé. Entity Framework n'obtiendra pas automatiquement le nom de la propriété Supervisor, mais l'association elle-même fonctionne et vous pouvez renommer la propriété manuellement.

En ce qui concerne votre exemple spécifique, je me méfie du -1. Si c'est une vraie clé primaire d'un vrai inventaire, c'est bien. Si c'est une valeur magique qui n'indique aucun enregistrement, alors utilisez NULL ou faites-en un vrai enregistrement. Pour que Entity Framework reconnaisse cette relation, vous devez créer une clé étrangère de base de données réelle. Toutes les valeurs doivent donc faire référence à des enregistrements. Vous pouvez également placer ParentID dans une autre table pour ne pas avoir à inventer un nombre magique pour cela.

+0

Les clés étrangères nulles sont mieux évitées à mon avis. – sqlvogel

+0

dans le mien aussi, mais c'est la structure de la table, je suis coincé avec de la société. merci quand même :-) – benwebdev

Questions connexes