В EF легко загружать связанные объекты.
Но у меня возникают трудности с включением унаследованных объектов при загрузке данных с использованием модели таблиц для каждого типа.
Это моя модель:
Сущности:
-
ArticleBase(базовая сущность статьи)-
ArticleSpecial(унаследовано отArticleBase)
-
-
UserBase(базовый пользовательский объект)-
UserSpecial(наследуется отUserBase)
-
-
Image
Отношения такие, как показано на изображении (без многих столбцов): 
На самом деле мои пользователи всегда имеют тип UserSpecial, поскольку UserBase используется в другом приложении, поэтому мы можем делиться учетными данными. Это единственная причина, у меня есть две отдельные таблицы. Таблица UserBase не может быть изменена каким-либо образом, потому что другое приложение UserBase бы.
Вопрос
Как я полагаю, чтобы загрузить ArticleSpecial как с CreatedBy и EditedBy набора, так что оба типа UserSpecial (который определяет Image отношения)?
Я пробовал (но безуспешно) эти варианты:
1. Использование лямбда-выражений:
context.ArticleBases
.OfType<ArticleSpecial>()
.Include("UserCreated.Image")
.Include("UserEdited.Image");
В этом случае проблема заключается в том, что CreatedBy и EditedBy связаны с UserBase, которая не определяет навигацию по Image. Поэтому я должен как-то привести эти два к типу UserSpecial например:
context.ArticleBases
.OfType<ArticleSpecial>()
.Include("UserCreated<UserSpecial>.Image")
.Include("UserEdited<UserSpecial>.Image");
Но, конечно, использование обобщений в Include("UserCreated<UserSpecial>.Image") не работает.
2. Я пытался использовать запрос LINQ
var results = from articleSpecial in ctx.ArticleBase.OfType<ArticleSpecial>()
join created in ctx.UserBase.OfType<UserSpecial>().Include("Image")
on articleSpecial.UserCreated.Id equals created.Id
join edited in ctx.UserBase.OfType<UserSpecial>().Include("Image")
on articleSpecial.UserEdited.Id equals edited.Id
select articleSpecial;
В этом случае я получаю только экземпляры объекта ArticleSpecial без установки связанных свойств. Я знаю, что должен как-то их выбрать, но не знаю как?
Выберите часть в моем LINQ может быть изменен на что-то вроде
select new { articleSpecial, articleSpecial.UserCreated, articleSpecial.UserEdited };
но изображения все еще не загружены в мой контекст. Мои объединения в этом случае едва используются для фильтрации результатов articleSpecial, но они не загружают объекты в контекст (я полагаю).