6

ich die folgenden Einheiten auf meinem EDMX haben: -. alt text, ernsthafte Probleme mit Entity Framework und Fremdschlüssel :(

Diese beiden entites von Update-Modell aus Datenbank generiert wurden

Jetzt Beachten Sie, wie mein Land den folgenden Primärschlüssel hat: -

Namen & Isocode

Dies liegt daran, dass jedes Land im System durch Name und IsoCode eindeutig ist.

Jetzt, mit meinen Staaten ... ist es ähnlich. Primary Key ist: -

Namen & countryid

Jeder Staat ist einzigartig mit Namen und pro Land.

Jetzt ist der Fremdschlüssel für Staaten eine CountryId. Dies ist die sql: -

ALTER TABLE [dbo].[States] WITH CHECK ADD 
     CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryId]) 
REFERENCES [dbo].[Countries] ([CountryId]) 
ON UPDATE CASCADE 
GO 

ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries] 
GO 

Ziemlich einfache Sachen.

ABER EntityFramework mag es nicht :(Es ist davon aus, dass ich einige Eigenschaften von State Einheit zu beiden Primärschlüsseleigenschaften in der Country Einheit verbinden muß.

Ist es möglich, eine Verbindung zwischen Land hinzuzufügen und Staat auf Country.CountryId < -> State.CountryId ... wie ich in meiner DB zugeordnet habe

Beifall;)

+0

@Alex James: Bist du da um zu helfen, mein lieber Herr? –

+0

Yeap ... siehe die Antwort unten! –

Antwort

10

in EF (3.5 und 4.0) FKs to Primary Keys zeigen muss?.

Aber Sie scheinen zu versuchen, einen Kandidaten Key-zu-Punkt (dh [Länder]. [CountryId]

Ich weiß, dass dies aber :)

etwas das EF-Team überlegen, für die nächste Version ist

this helps

Alex

+0

Danke, Alex, dass du meine Frage beantwortet hast. Ich schätze es aufrichtig :) Sieht so aus, als würde ich zurückgehen, um die Identitäten zu PKs zu machen und einzigartige Einschränkungen hinzuzufügen. Doh :) immer einen Schritt voraus die aktuellen EF Builds ... :) Danke nochmal Kumpel - liebe wirklich deine Hilfe :) weiter so! –

+4

Ich habe mir die CTP5-Änderungsdokumente angesehen und nichts davon gesehen. Wird diese Funktion noch in Erwägung gezogen, oder in der Pipeline oder ...? Dies ist ein echter Stolperstein für die Zuordnung von Legacy-Datenbanken. –

0

Für eine ordnungsgemäße DB Normalisierung ist erste Sache, die Primärschlüssel sein muss, nur countryid und StateID Felder - die Haupt-ID-Felder für jede Tabelle.

Und ss sehe ich aus der Beschreibung Namen & Isocode und Namen & countryid sollte tatsächlich eindeutige Schlüssel, nicht primär.

Dann wird die Modellklasse Staat sollte ein Feld haben:

public Country Country { get; set; } 

Jetzt EF haben sehr gute Beispiele und da 4.3.1 + unterstützt voll-Code erster/DB ersten Modelle, die ich denke, wird erleichtern das zu lösen. EF 5 haben mehr Kompatibilität Updates, so denke ich, dass es kein Problem für ältere DB-Motoren sein wird.

+0

Es sei denn, ich habe deine Antwort irgendwie missverstanden - das ist völlig nebensächlich. "Ist es möglich, eine ASSOCIATION zwischen Land und Staat auf Country.CountryId <-> State.CountryId" ist die Frage - wie in "Kann ich eine Verknüpfung auf etwas anderes als ein Primärschlüssel (der Kandidat Schlüssel in diesem Fall) hinzufügen " – tim

Verwandte Themen