Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Entity Framework 4 Таблица на йерархия - Как да дефинирам навигационни свойства за деца?

Така че реших няколко от проблемите си, но се ударих в тухлена стена.

На първо място, когато създавате саморефериращи 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате SQL Server на Red Hat 8

  2. Максимален размер на променлива varchar(max).

  3. Как да премахнете ограничението на външния ключ в базата данни на SQL Server - SQL Server / TSQL урок, част 75

  4. Как да предотвратя повторното задействане на база данни?

  5. Предимства на SQL Server 2008 пред SQL Server 2005?