Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Entity Framework 4 Tabela na hierarchię — jak zdefiniować właściwości nawigacyjne u dzieci?

Więc rozwiązałem kilka moich problemów, ale trafiłem na ceglaną ścianę.

Przede wszystkim, gdy tworzysz FK odwołujące się do siebie po stronie bazy danych, gdy próbujesz "Aktualizuj model z bazy danych", Entity Framework doda te właściwości nawigacyjne do głównego typu bazowego, ponieważ nie ma wyraźnego sensu TPH - ty trzeba to zrobić po stronie modelu.

ALE możesz ręcznie dodać właściwości nawigacyjne do typów podrzędnych.

WRT ten błąd:

To dlatego, że miałem FK o nazwie „Location_State”, którego próbowałem użyć do relacji „ZipCode_State” ORAZ relacji „City_State” – która nie działa (nadal nie mam pojęcia dlaczego).

Aby rozwiązać ten problem, musiałem dodać dodatkowe kolumny i dodatkowe FK – jedną o nazwie „ZipCode_State”, a drugą o nazwie „City_State” – oczywiście musi to być 1-1 między nawigacją a fizycznymi FK.

To jest moje pole dyskryminacyjne. Po stronie bazy danych nie można zerować .

Czytałem wątki na ten temat i powiedzieli, że musisz zmienić relacje z 0..* na 1..* - ale moje relacje były już 1..*.

Jeśli spojrzysz na moją tabelę rzeczywistej bazy danych "Lokalizacje" powyżej, wszystkie FK są nullable (muszą być). Dlatego zacząłem się zastanawiać, czy moje relacje powinny wynosić 0..*.

Ale są nieważne ze względu na TPH - nie wszystkie "Lokalizacje" będą miały "Stan". Ale jeśli ta lokalizacja to „Miasto”, MUSI mieć „Stan”.

Moje uczucia dodatkowo pocieszyło to pytanie SO:ADO EF — Błędy mapowania powiązań między typami wyprowadzonymi w TPH

Właściwie próbowałem tego obejścia (zanim nawet się z nim natknąłem), a obejście nie działa dla mnie. Próbowałem nawet zmienić wszystkie relacje z 1..* na 0..* i nadal nie miałem szczęścia.

Tracę tu zbyt dużo czasu, wróciłem do TPT.

Pod koniec dnia, z TPH, miałbym absurdalnie duży stół, z mnóstwem zbędnych, zerowych kolumn. JOIN jest bardziej wydajny. Ale przynajmniej w przypadku TPT nie muszę mieć wartości null i samoodnoszących się FK.

Jeśli ktoś ma rozwiązanie tego problemu to dajcie znać. Ale do tego czasu trzymam się TPT.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Próba dołączenia bazy danych o automatycznej nazwie dla pliku ....database1.mdf nie powiodła się

  2. Jak wstawić wiele wierszy - potrzebna pętla?

  3. Procedura składowana serwera SQL zwraca tabelę

  4. Podziel wartość jednej kolumny na wartości wielu kolumn

  5. Jak przekonwertować małe litery na wielkie w programie SQL Server — UPPER()