Проблема с нетерпеливой загрузкой вложенной навигации на основе абстрактного объекта (EF CTP5)

Я являюсь частью моей модели EF, которая выглядит так:

enter image description here

Резюме:

  • Местоположение имеет много сообщений
  • Сообщение представляет собой абстрактный класс
  • Обсуждение происходит от из Сообщение
  • В обсуждениях много комментариев

Теперь запрос 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 не поддерживает фильтрацию с активной загрузкой. Единственные варианты - получить все или использовать проекцию анонимного типа.

Я никак не могу получить все, так как задействовано слишком много метаданных. Итак, я пытаюсь использовать проекцию анонимного типа.

5
задан RPM1984 4 March 2011 в 03:53
поделиться