sql >> Databasteknik >  >> RDS >> Sqlserver

Entity Framework 4 Tabell per hierarki - Hur definierar man navigationsegenskaper på barn?

Så jag löste några av mina problem, men jag träffade en tegelvägg.

Först och främst, när du skapar självrefererande FK:er i databassidan, när du försöker "Uppdatera modell från databas", kommer Entity Framework att lägga till dessa navigeringsegenskaper till huvudbastypen, eftersom den inte har någon uttrycklig känsla för TPH - du måste göra detta på modellsidan.

MEN, du kan manuellt lägga till navigeringsegenskaperna till underordnade typer.

WRT detta fel:

Det berodde på att jag hade en FK som heter "Location_State" som jag försökte använda för "Postnummer"-relationen, OCH "City_State"-relationen - som inte fungerar (fortfarande ingen aning om varför).

Så för att lösa det var jag tvungen att lägga till extra kolumner och extra FK:er - en som heter "ZipCode_State", och en annan som heter "City_State" - det måste uppenbarligen vara en 1-1 mellan nav och fysiska FK.

Det är mitt diskrimineringsfält. På databassidan är den inte nullbar .

Jag läste trådar om det här problemet och de sa att du måste ändra relationerna från 0..* till 1..* - men mina relationer var redan 1..*.

Om du tittar på min "Platser" faktiska databastabell ovan, är alla FK:er nullbara (de måste vara det). Därför började jag undra om mina relationer borde vara 0..*.

Men de är nullbara på grund av TPH - inte alla "Locations" kommer att ha en "State". Men om den platsen är en "stad", så MÅSTE den ha en "stat".

Mina känslor tröstades ytterligare av denna SO-fråga:ADO EF - Errors Mapping Associations between Derived Types in TPH

Jag försökte faktiskt den lösningen (innan jag ens stötte på den), och lösningen fungerar inte för mig. Jag försökte till och med ändra alla relationer från 1..* till 0..*, men fortfarande utan lycka.

Slösar bort för mycket tid här, jag har gått tillbaka till TPT.

I slutet av dagen, med TPH skulle jag ha haft ett löjligt stort bord, med massor av överflödiga, nullbara kolumner. JOIN-mässigt är det mer effektivt. Men åtminstone med TPT krävs inte att jag har nullbara och självrefererande FK:er.

Om någon har en lösning på detta problem, låt mig veta. Men tills dess håller jag fast vid TPT.




  1. allvarligt fel påträffades under körning... under uppdatering

  2. SQL Välj om du vill att ett värde endast ska visas en gång

  3. Det går inte att skapa en EntityManager i JavaFx

  4. Deklarera dynamisk array i Oracle PL/SQL