Entity Framework: получение объектов, не связанных напрямую - PullRequest
3 голосов
/ 25 июня 2010

Я использую Entity Framework для моего приложения .NET.Мне также удалось вернуть объекты и их непосредственно связанные объекты (очень удобно), но у меня возникают проблемы с получением объектов этих объектов.

 IEnumerable<Lot> i = (((ObjectSet<Car>)_carRepository.GetQuery())
                                    .Include(a => a.CarTypes).Take(10).ToList()

Это работает, и я могу получить доступ к carTypes, однакоЯ не могу понять, как получить доступ к таблицам, связанным с CarTypes (например, к таблицам, у которых есть поля, связанные с типами автомобилей).

Я пытался использовать Join, однако мне не удалось выяснить, как заставить его работать правильно.

Вся помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Включение может быть связано, но вы должны иметь в виду, что оно использует строки, а не лямбды. Таким образом, вы делаете .Include ("CarTypes.Company"), если вы хотите включить два уровня. Вы также можете связать операторы Включить, что означает включение более одной ветви одного и того же верхнего уровня, например. .INCLUDE ( "CarTypes"). Включить ( "SomeOtherTypeFromTheSameParentAsCar").

Однако следует помнить, что глубокие операторы Include могут не дать наилучшей возможной производительности, потому что каждая часть Include просто добавляет к одному создаваемому вами запросу, поэтому вы получите более крупный и более сложный запрос, который делает целую кучу соединений под одеялом. Иногда эффективнее сделать несколько включений в одном запросе, а затем выполнить второй запрос, чтобы получить оставшиеся данные или что-то в этом роде.

С EF4 вы также можете настроить ленивую загрузку, которая иногда может сделать такие вещи еще проще (но, конечно, он производит несколько циклов, а не одну или две очень большие циклы).

0 голосов
/ 25 июня 2010

Я полагаю, что вы можете объединить ... Включает ... Таким образом, вы можете получить что-то вроде

.Include(a => a.CarTypes.Company) 

Если вы просто используете одно или два поля каждого типа, одна из возможностей может заключаться в создании представления вБД.Затем вы можете добавить это представление в модель EF и получить прямой доступ к этим свойствам.

...