Я являюсь частью моей модели EF, которая выглядит так:
Резюме:
Теперь запрос i пытаюсь достичь:
Получить информацию об идентификаторе местоположения 1234, включая любые обсуждения и комментарии, связанные с этими обсуждениями.
Я могу получать обсуждения и комментарии вроде этого:
var discussions = ctx.Posts
.OfType<Discussion>()
.Include(x => x.Comments)
.ToList();
Но я не могу получить он основан на навигации Сообщений по объекту Location .
Я пробовал это:
var locationWithDiscussionsAndComments = ctx
.Locations
.Include(x => x.Posts
.OfType<Discussion>()
.Select(y => y.Comments))
.SingleOrDefault();
который компилируется, но получаю сообщение об ошибке:
System.ArgumentException :Выражение пути включения должно ссылаться на свойство, определенное сущностью, при необходимости также с вложенными свойствами или вызовами Select. Имя параметра: путь
Есть идеи? Я, вероятно, мог бы пойти "назад" от сообщений:
var locationWithDiscussionsAndComments = ctx
.Posts
.Include(x => x.Location)
.OfType<Discussion>()
.Include(x => x.Comments)
.Where(x => x.LocationId == 1234)
.Select(x => x.Location)
.ToList();
Но это и волосатое, и семантически неправильное с точки зрения моих репозиториев (мне не нужно было проходить через репозиторий сообщений, чтобы получить информацию о местоположении).
Есть идеи?
РЕДАКТИРОВАТЬ
Итак, подумав над этим, я понял, что OfType
- это операция фильтрации. Как известно, EF не поддерживает фильтрацию с активной загрузкой. Единственные варианты - получить все или использовать проекцию анонимного типа.
Я никак не могу получить все, так как задействовано слишком много метаданных. Итак, я пытаюсь использовать проекцию анонимного типа.