Entity Framework - ręcznie dodaj właściwość nawigacji

115

Wygenerowałem model Entity Framework (4.0) z mojej bazy danych. Nie zaprojektowałem bazy danych i nie mam żadnej kontroli nad schematem, ale jest kilka tabel, które nie mają zdefiniowanych ograniczeń klucza obcego, ale jest zdefiniowana niejawna relacja.

Na przykład:

Mam tabelę o nazwie People, która zawiera następujące kolumny: GenderID RaceID

Istnieją tabele dla płci i rasy, ale w tabeli Ludzie nie ma klucza obcego.

Podczas importowania modelu nie dodano właściwości nawigacji dla tych relacji. Próbowałem dodać go ręcznie, ale From Role i To Role są wyłączone. Nie jestem pewien, jak sam dodać relację. Jak mam to zrobic?

Zwolnij
źródło

Odpowiedzi:

181

Tak - to nie jest takie proste.

Oto co robisz:

1 - Kliknij prawym przyciskiem myszy projektanta, Dodaj -> Skojarzenie

2 - Skonfiguruj stowarzyszenie i liczebności (ludzie * .. 1 Płeć, ludzie * .. 1 Rasa)

3 - Przejdź do przeglądarki modelu -> Asocjacje

4 - Kliknij prawym przyciskiem myszy nowo utworzone skojarzenia, kliknij opcję Właściwości

5 - Tutaj musisz ustawić punkty końcowe dla opcji klucza i kaskady. Upewnij się, że punkty końcowe są prawidłowe. W tym miejscu można również ustawić ograniczenie referencyjne dla niejawnej właściwości nawigacyjnej.

6 - Odwzoruj właściwość nawigacyjną na odpowiednie tabele / pola.

7 - Zatwierdź swój model, trzymaj kciuki.

Mam nadzieję że to pomoże.

RPM1984
źródło
20
+1 za uratowanie tego, co zostało z moich włosów. Dodam, że # 6 wymaga zmiany kolumny klucza obcego na stronie właściwości stowarzyszenia, ustawienie ograniczenia referencyjnego. Naciśnij klawisz [...], aby otworzyć okno dialogowe ograniczenia referencyjnego i zmienić pole fikcyjne, które projektant podłączył do tabeli podrzędnej w obszarze Właściwość zależna.
Joel Brown
8
Będziesz także musiał przejść do właściwości tabeli podrzędnej i usunąć pole fikcyjne, które dodał projektant (i które nie jest mapowane na żadne rzeczywiste pola w tabeli podrzędnej).
Joel Brown
2
W przypadku View, upewnij się również, że masz właściwą definicję klucza podstawowego (kliknij prawym przyciskiem myszy wybierz powiązane pola, zaznacz je jako EntityKey we właściwościach). W przeciwnym razie możesz otrzymać `` Wielokrotność nie jest ważna w roli w relacji, ponieważ zależna rola odnosi się do właściwości klucza ... ''
Mikl X
1
Na drugim miejscu możesz się upewnić, że odznaczono pole wyboru „Dodaj właściwości klucza obcego do jednostki”. To stwarza niepotrzebne bóle głowy, jeśli naprawdę tego nie potrzebujesz.
Szyfrowanie
Po ponownym zaktualizowaniu modelu z bazy danych jednostki szkieletowe zachowają ręcznie dodane skojarzenie?
voodoo_patch
45

Natknąłem się na ten wpis na blogu, który proponuje następujące rozwiązanie, które działało świetnie (niestety nie mogłem zmusić RPM1984 do pracy w mojej sytuacji).

  1. Dodaj powiązanie za pomocą menu kontekstowego projektanta w tle prawym przyciskiem myszy
  2. Skonfiguruj swoje powiązanie (pamiętaj, aby odznaczyć tworzenie klucza obcego)
  3. Kliknij skojarzenie prawym przyciskiem myszy i wybierz opcję Właściwości
  4. Kliknij ...przycisk Ograniczenie referencyjne
  5. Skonfiguruj relację między kluczami w obrębie
  6. Weryfikuj (z menu kontekstowego projektanta)
  7. ???
  8. Zysk!
dav_i
źródło
4
+1 Punkt 4 sprawił, że zrobiłem to dobrze, przeoczyłem to w odpowiedzi RPM194.
Hugo Logmans