Контекст данных Entity Framework не содержит коллекцию моей сущности, которая использует наследование.Зачем? - PullRequest
2 голосов
/ 14 июня 2011

Я использую модель с Entity Framework, которая использует преимущества наследования.У меня есть один объект для базового типа под названием «Пользователь» и два объекта, которые наследуются от него («Администратор» и «Рабочий»).Вот модель:

http://www.codetunnel.com/content/entitymodel.jpg

Проблема в том, что когда я создаю свой контейнер Entity Framework, в нем нет набора рабочих или администраторов, только пользователи.

EntityContainer context = new EntityContainer();
context.Users; // Exists.
context.Workers; // does not exist.

Как получить коллекцию рабочих / администраторов, а не только общих пользователей?Аналогично, как я могу предоставить моему FamilyAccount объекту свойство навигации для администраторов и рабочих, а не для общих пользователей?

Заранее спасибо!

PS - я использую таблицу * для каждого типа модель для моего наследства, если это имеет значение.

.OfType, кажется, работает хорошо.Есть ли другой способ добавить свойство навигации только для рабочих или администраторов?

Ответы [ 3 ]

3 голосов
/ 14 июня 2011

Да, это поведение EF.Если вы хотите перейти к Admin и Worker, вы можете сделать следующее:

var admins = context.Users.OfType<Admin>();
var workers = context.Users.OfType<Worker>();
0 голосов
/ 14 июня 2011

http://mosesofegypt.net/post/Inheritance-and-Associations-with-Entity-Framework-Part-3.aspx

В этой статье описывается, как расширить сущность и добавить свойство навигации самостоятельно. Прокрутите до заголовка «Построить запрос конкретного отдела». Это то, к чему я стремился, исключив необходимость использования .OfType<Worker>().

Теперь я могу сделать familyAccount.Admins, и в районе все хорошо.

0 голосов
/ 14 июня 2011

Наследование таблиц на типы (TPT) включает в себя сохранение всех свойств базового типа в одной таблице. Наследование табличного типа (TPC) включает в себя сохранение данных для каждого типа в полностью отдельной таблице без ограничений внешнего ключа между ними.

Если вам нужны отдельные таблицы для администраторов и рабочих, вам, вероятно, следует использовать TPC.

...