sql >> Database teknologi >  >> RDS >> Sqlserver

Entity Framework 4 Tabel pr. hierarki - Hvordan defineres navigationsegenskaber på børn?

Så jeg løste et par af mine problemer, men jeg ramte en mur.

Først og fremmest, når du opretter selvrefererende FK'er i databasesiden, når du prøver "Opdater model fra database", vil Entity Framework tilføje disse navigationsegenskaber til hovedbasistypen, da den ikke har nogen eksplicit fornemmelse af TPH - du skal gøre dette i modelsiden.

MEN du kan manuelt tilføje navigationsegenskaberne til de underordnede typer.

WRT denne fejl:

Det var fordi jeg havde en FK kaldet "Location_State", som jeg forsøgte at bruge til "Pistkode_State"-forholdet, OG "City_State"-forholdet - som ikke virker (stadig ingen idé om hvorfor).

Så for at løse det, var jeg nødt til at tilføje ekstra kolonner og ekstra FK'er - en kaldet "ZipCode_State", og en anden kaldet "City_State" - det skal naturligvis være en 1-1 mellem navs og fysiske FK'er.

Det er mit diskriminatorfelt. På databasesiden er den ikke nullbar .

Jeg læste tråde om dette problem, og de sagde, at du skulle ændre relationerne fra 0..* til 1..* - men mine relationer var allerede 1..*.

Hvis du ser på min "Locations" faktiske databasetabel ovenfor, er alle FK'er nullable (det skal de være). Derfor begyndte jeg at spekulere på, om mine forhold skulle være 0..*.

Men de er nullable på grund af TPH - ikke alle "Locations" vil have en "State". Men hvis denne placering er en "by", så SKAL den have en "stat".

Mine følelser blev yderligere trøstet af dette SO-spørgsmål:ADO EF - Errors Mapping Associations between Derived Types in TPH

Jeg prøvede faktisk den løsning (før jeg overhovedet stødte på den), og løsningen virker ikke for mig. Jeg prøvede endda at ændre alle relationerne fra 1..* til 0..*, og stadig uden held.

Hvis jeg spilder for meget tid her, er jeg gået tilbage til TPT.

I slutningen af ​​dagen ville jeg med TPH have haft et latterligt stort bord med masser af overflødige, nullable søjler. JOIN-mæssigt er det mere effektivt. Men i det mindste med TPT er jeg ikke forpligtet til at have nullbare og selvrefererende FK'er.

Hvis nogen har en løsning på dette problem, så lad mig det vide. Men indtil da holder jeg mig til TPT.




  1. PHP Bedste måde at cache MySQL-resultater på?

  2. brug kommandoen database_name i PostgreSQL

  3. Oracle - opdel enkelt række i flere rækker

  4. Oprettelse af en beregnet kolonne i SQL Server 2008