2010-12-15 260 views
0

Dans la capture d'écran ci-dessous est une entité (URL) dans mon modèle. Le champ ParentId est un FK autoréférencé (pointe vers Url.Id). Vous pouvez voir cette navigation au bas de la capture d'écran.Auto-Référencement FK générant étrangement

alt text

Dans mon SQL et mon DB, que je produis le EDMX de l'auto-référencement FK est appelé FK_Urls_Parent:

-- Creating foreign key on [ParentId] in table 'Urls' 
ALTER TABLE [Urls] 
ADD CONSTRAINT [FK_Urls_Parent] 
    FOREIGN KEY ([ParentId]) 
    REFERENCES [Urls] 
     ([Id]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION; 

Mes questions sont les suivantes:

  1. Pourquoi EF a-t-il généré Urls1 et Url1 juste à partir de ce FK? Url1 est une propriété 0 ou 1 qui est 'FromRole' Urls1. Urls1 est Urls1 de "Url" de Urls1. Il semble que EF crée une propriété de navigation identique à la table Url. Pourquoi le ferait-il et puis-je faire quelque chose pour le faire juste générer la propriété de navigation désirée: Urls1?
  2. D'accord, ce n'est pas aussi important, mais puis-je contrôler le nom de la propriété Navigation en fonction du nom FK ou de quelque chose dans la base de données? Je déteste que ça l'appelle 'Url1'. Je préférerais 'Parent', mais je ne veux pas avoir à le changer manuellement dans le concepteur chaque fois que je régénère le modèle.

Merci.

Répondre

2

Il est la modélisation des deux côtés de la relation. En d'autres termes, l'une des propriétés sera l'entrée pointée par ParentId de cette entrée. L'autre sera l'entrée (s) dont le champ ParentId pointe vers cette entrée. Vous pouvez désactiver un côté dans les propriétés de la relation ou les renommer pour leur donner un sens. Tel que, par exemple, ParentUrl et ChildUrls.

Je ne suis pas sûr à 100% de la façon d'accéder au dialogue de relation de propriété sans ouvrir le programme moi-même, ce que je ne peux pas faire maintenant. Je sais pour moi qu'il apparaît dans la fenêtre de propriétés en bas à droite (par défaut) lorsque le lien est sélectionné.

En ce qui concerne la réalisation de ce changement d'une manière ou d'une autre à travers les régénérations de modèles, je ne connais aucun moyen de le faire. J'espère que quelqu'un d'autre le saura, car cela me sauverait beaucoup de temps aussi!

+1

Ce serait ChildUrls car une entité parentale unique a une pluralité d'enfants. –

+0

@Hightechrider Bien sûr. Fixé. – jdmichal

+0

Merci beaucoup d'avoir expliqué! – Chad