6

Mam następujące podmioty na moim EDMX: -. alt textpoważne problemy z Entity Framework i kluczy obcych :(

Te dwa udziałów w jednostkach zostały wygenerowane przez Aktualizuj Model z Database

teraz Zwróć uwagę, jak mój kraj ma następujący klucz podstawowy: -

Nazwa & IsoCode

Dzieje się tak, ponieważ każdy kraj jest UNIKALNY w systemie według nazwy i kodu izoCode.

Teraz z moimi państwami ... to jest podobne. Klucz podstawowy jest: -

Nazwa & countryid

Każdy stan jest wyjątkowy po imieniu i na kraj.

Teraz klucz obcy dla państw to Krajowy. To jest 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 

Bardzo proste rzeczy.

ALE EntityFramework nie podoba :(To przy założeniu, że muszę połączyć kilka właściwości z State podmiotu do obu głównych kluczowych właściwości w jednostce Country.

Czy jest możliwe aby dodać stowarzyszenie między kraju i stan na Country.CountryId < -> State.CountryId ... jak mam odwzorowany w moim DB

Cheers;)

+0

@Alex James: jesteś w pobliżu, aby pomóc, miły panie? –

+0

Yeap ... zobacz odpowiedź poniżej! –

Odpowiedz

10

EF (3.5 i 4.0) FKS MUSI wskazywać Primary Keys.

Ale wydaje się być stara się wskazywać na klucz potencjalny (tzn [Kraje]. [Countryid]

wiem, że to jest coś, zespół EF rozważają dla następnej wersji chociaż :)

Nadzieja to pomaga

Alex

+0

Dziękuję, Alex, za wzięcie udziału w moim pytaniu. Szczerze to doceniam :) Wygląda na to, że wrócę do tworzenia tożsamości PK i dodawania unikalnych ograniczeń. Doh :) zawsze o krok przed aktualnymi kompilacjami EF ... :) Jeszcze raz kolego - naprawdę kocham twoją pomoc :) trzymaj się! –

+4

Spojrzałem na dokumentację zmian CTP5 i nie widziałem nic z tym związanego. Czy ta funkcja jest nadal rozważana, czy jest w trakcie, czy ...? To jest prawdziwy przeszkodą do mapowania starszych baz danych. –

0

Do poprawnego normalizacji DB, pierwszą rzeczą jest to, że klucze podstawowe musi być tylko countryid i StateId pola - główne pola ID dla każdej tabeli.

i SS widzę z opisu Nazwa & IsoCode i Nazwa & countryid powinny być faktycznie Unikalne klucze, nie podstawowe.

Następnie klasa modelu State powinien mieć pole:

public Country Country { get; set; } 

Teraz EF mają bardzo dobre przykłady i od 4.3.1 + to w pełni obsługuje kod najpierw/DB pierwszych modeli, które myślę, że ułatwi rozwiązując to. EF 5 ma więcej aktualizacji kompatybilności, więc myślę, że nie będzie to problemem dla starszych silników baz danych.

+0

Chyba że jakoś źle zrozumiałem twoją odpowiedź - jest to całkowicie sprzeczne z pytaniem. "Czy można dodać STOWARZYSZENIE między państwem a państwem na Kraj.CountryId <-> State.CountryId" jest pytanie - jak w "Czy mogę dodać stowarzyszenie na coś innego niż klucz podstawowy (w tym przypadku klucz kandydujący) " – tim