Вы не можете отобразить два обычных объекта в одну таблицу. У вас есть несколько вариантов:
- Использовать разбиение таблицы.
- Использовать пользовательский запрос с проекцией на не-тип объекта (как предложено @Aducci)
- Использовать QueryView
- Использовать представление базы данных или напрямую DefiningQuery
Разделение таблицы
Разделение таблицы позволяет сопоставить таблицу на две сущности в отношении 1: 1. Первая сущность будет содержать только PK и подмножество полей, которые вам нужны всегда. Вторая сущность будет содержать все остальные поля и PK. Обе сущности будут содержать свойство навигации друг для друга. Теперь, если вам нужно только подмножество полей, вы будете запрашивать первый объект. Если вам нужны все поля, вы запросите первую сущность и добавите свойство навигации к второй сущности. Вы также можете лениво загрузить второй объект, если он вам нужен.
QueryView
QueryView - это запрос ESQL, определенный непосредственно в вашем отображении (MSL), и он сопоставлен с новым типом сущности только для чтения. Вы можете использовать QueryView, чтобы определить проекцию вашей полной сущности в сущности. QueryView должен быть определен вручную в EDMX (он не доступен в дизайнере). Как я знаю, QueryView вначале недоступен в коде, но на самом деле он такой же, как и пользовательская проекция на не-тип объекта.
DefiningQuery
DefiningQuery - это пользовательский запрос, определенный непосредственно в вашей модели хранения (SSDL). DefiningQuery обычно используется при сопоставлении с представлениями базы данных, но вы можете использовать его для любого пользовательского SQL SELECT. Вы отобразите результат запроса на тип объекта только для чтения. DefiningQuery должен быть определен вручную в EDMX (он недоступен в дизайнере). Он также непосредственно не доступен в Code сначала, но на самом деле это то же самое, что вызов SqlQuery
на DbDatabase
. Проблема с DefiningQuery заключается в том, что после того, как вы вручную определите его в SSDL, вы не сможете использовать Обновить модель из базы данных, поскольку эта операция заменяет полный SSDL и удаляет определение вашего запроса.