Така че реших няколко от проблемите си, но се ударих в тухлена стена.
На първо място, когато създавате саморефериращи FK в страната на базата данни, когато опитате „Актуализиране на модела от базата данни“, Entity Framework ще добави тези навигационни свойства към основния базов тип, тъй като няма изричен смисъл на TPH – вие трябва да направите това от страната на модела.
НО можете ръчно да добавите навигационните свойства към дъщерните типове.
WRT тази грешка:
Това беше, защото имах FK, наречен "Location_State", който се опитвах да използвам за връзката "ZipCode_State", И връзката "City_State" - която не работи (все още нямам представа защо).
Така че, за да реша това, трябваше да добавя допълнителни колони и допълнителни FK - една, наречена "ZipCode_State", и друга, наречена "City_State" - очевидно трябва да е 1-1 между навигационните и физическите FK.
Това е моето поле за дискриминация. От страната на базата данни той не може да се нулира .
Четох теми за този проблем и те казаха, че трябва да промените отношенията от 0..* на 1..* - но моите отношения вече бяха 1..*.
Ако погледнете моята действителна таблица с база данни „Местоположения“ по-горе, всички FK са nullable (те трябва да бъдат). Затова започнах да се чудя дали връзките ми трябва да бъдат 0..*.
Но те са nullable поради TPH - не всички „Местоположения“ ще имат „Състояние“. Но ако това местоположение е „Град“, то ТРЯБВА да има „Щат“.
Чувствата ми бяха допълнително утешени от този SO въпрос:ADO EF - Грешки при съпоставяне на асоциации между производни типове в TPH
Всъщност опитвах това заобиколно решение (преди дори да се натъкна на него) и заобиколното решение не работи за мен. Дори се опитах да променя всички връзки от 1..* на 0..* и пак не успях.
Тъй като губя твърде много време тук, се върнах към TPT.
В края на деня с TPH щях да имам абсурдно голяма таблица с много, много излишни колони с възможност за нула. От гледна точка на JOIN е по-ефективно. Но поне с TPT не се изисква да имам ненулеви и саморефериращи FK.
Ако някой има решение на този проблем, нека ме уведоми. Но дотогава се придържам към TPT.