2010-12-15 7 views
0

In der folgenden Screenshot ist eine Entity (URL) in meinem Modell. Das ParentId-Feld ist ein selbstreferenzierender FK (verweist auf Url.Id). Sie können diese Navigation am unteren Rand des Screenshots sehen.Self-Referencing FK Erzeugt strangly

alt text

In meinem SQL und meine DB, die ich die EDMX aus, die sich selbst verweis FK erzeugen wird FK_Urls_Parent genannt:

-- 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; 

Meine Fragen sind:

  1. Warum hat EF URLs1 und URL1 nur von diesem einen FK generiert? Url1 ist eine 0 oder 1 Eigenschaft, die "FromRole" Urls1 ist. URLs1 ist 'FromRole' URLs 'ToRole' URLs1. Offenbar erstellt EF eine Navigationseigenschaft, die genau der URL-Tabelle entspricht. Warum sollte es das tun und kann ich etwas tun, damit es nur die eine gewünschte Navigationseigenschaft erzeugt: Urls1?
  2. Okay, also nicht ganz so wichtig, aber kann ich den Namen der Navigationseigenschaft basierend auf dem FK-Namen oder etwas in der DB steuern? Ich hasse es, dass es "Url1" genannt wird. Ich würde "Parent" bevorzugen, möchte es aber nicht jedes Mal, wenn ich das Modell neu generiere, im Designer manuell ändern müssen.

Danke.

Antwort

2

Es modelliert beide Seiten der Beziehung. Mit anderen Worten, eine der Eigenschaften ist der Eintrag, auf den der Eintrag ParentId dieses Eintrags zeigt. Der andere ist der Eintrag, dessen Feld ParentId auf diesen Eintrag zeigt. Sie können eine Seite in den Beziehungseigenschaften deaktivieren oder sie umbenennen, um einen Sinn zu ergeben. Wie zum Beispiel ParentUrl und ChildUrls.

Ich bin nicht 100% sicher, wie man zum Property Relation Dialog gelangt, ohne das Programm selbst zu öffnen, was ich jetzt nicht kann. Ich weiß es für mich, es erscheint im (unten rechts) Eigenschaftenfenster, wenn der Link ausgewählt ist.

Soweit diese Änderung in Modellregenerationen irgendwie dauerhaft ist, weiß ich keine Möglichkeit, dies zu tun. Hoffentlich wird es jemand anders wissen, denn das würde mir auch viel Zeit ersparen!

+1

Das wäre ChildUrls, da eine einzige übergeordnete Entität mehrere untergeordnete Elemente hat. –

+0

@Hightechrider Natürlich. Fest. – jdmichal

+0

Vielen Dank für die Erklärung! – Chad