Как определить подтип объекта с помощью Inheritance с Entity Framework 4?

Я только начинаю использовать Entity Framework 4 в первый раз. Пока мне это нравится, но я немного смущен тем, как правильно выполнять наследование.

Я использую подход, ориентированный на модель, и у меня есть сущность Person с двумя сущностями подтипа: Employee и Client. EF правильно использует подход таблицы для каждого типа, однако я не могу понять, как определить, к какому типу человека относится конкретный объект.

Например, если я делаю что-то вроде

var people = from p in entities.Person select p;
return people.ToList<Person>();

В моем списке, который я формирую из этого, все, что мне нужно, это поле Id, поэтому я не хочу на самом деле запрашивать все таблицы подтипов (это список веб-страниц со ссылками, поэтому все, что мне нужно, это имя и идентификатор, все в таблице Persons).

Однако я хочу сформировать разные списки, используя этот один запрос, по одному для каждого типа людей (поэтому один список для клиентов, а другой для сотрудников).

Проблема в том, что если у меня есть сущность Person, я не вижу никакого способа определить, является ли эта сущность клиентом или сотрудником, без прямого запроса таблиц Client или Employee. Как я могу легко определить подтип объекта, не выполняя кучу дополнительных запросов к базе данных?


person KallDrexx    schedule 11.05.2010    source источник


Ответы (1)


Используйте .OfType<Client>() в своем запросе, чтобы получить только клиентов. См. раздел OfType.

e.g. entities.Person.OfType<Client>() ...

Используйте is, чтобы проверить, является ли объект Person определенным подклассом, например. if (p is Employee) ...

Кстати, почему это не entities.People? Вы не выбрали вариант множественного числа?

person Ian Mercer    schedule 12.05.2010
comment
Отлично, не знал, что проверка сработает в этом случае! Спасибо! В качестве примечания: я не использовал множественное число, потому что это был просто быстрый пример, который я мог состряпать, не описывая, что означают все мои сущности, и я не знал, что это будет правильно множественное число от человека к человеку :) - person KallDrexx; 12.05.2010