2010-06-16 3 views
3

У меня есть модель с родителями, детьми и внуками, в отношениях многих-ко-многим. Используя this article Я создал классы POCO, которые отлично работают, за исключением одной вещи, которую я еще не могу понять.EF4 запрос от родителя к внукам

Когда я запрашиваю родителей или детей непосредственно с помощью LINQ, SQL отражает запрос LINQ (.Count() выполняет COUNT в базе данных и т. Д.) - отлично. Родительский класс имеет свойство «Дети», чтобы получить доступ к своим детям. Но (и теперь для проблемы) это не показывает интерфейс IQueryable, но ICollection. Поэтому, когда я обращаюсь к ресурсу Children на конкретном родителе , все читают родительские дети. Хуже того, когда я обращаюсь к внукам (theParent.Children.SelectMany(child => child.GrandChildren).Count()), то для каждого ребенка выдается отдельный запрос для выбора всех данных его внуков. Это много отдельных запросов!

Изменение типа имущества детей от ICollection до IQueryable не решает этого. Помимо недостающих методов, которые мне нужны, например Add() и Remove(), EF просто не распознает свойство навигации.

Есть ли правильные пути (как в: взаимодействие с базой данных) запросов через детей (и каковы они)? Или это просто невозможно?

ответ

2

Обходной я нашел начали в середине, на детях:

var gc = context.Children 
    .Where(c => c.Parents.Any(p => p.Id == theParent.Id)) 
    .SelectMany(c => c.GrandChildren); 

int cnt = gc.Count(); 

По крайней мере, это дает SQL-запрос, который возвращает только количество внуков, а не все промежуточные данные.

Смежные вопросы