Платформа объекта linq запрос Включает () несколько дочерних объектов

Это может быть действительно elementry вопрос, но что хороший путь состоит в том, чтобы включать несколько дочерних объектов при записи запроса, который охватывает ТРИ уровня (или больше)?

т.е. у Меня есть 4 таблицы: Company, Employee, Employee_Car и Employee_Country

Компания имеет 1:m отношения с Сотрудником.

Сотрудник имеет 1:m отношения и с Employee_Car и с Employee_Country.

Если я хочу записать запрос, который возвращает данные из всех 4 таблицы, я в настоящее время пишу:

Company company = context.Companies
                         .Include("Employee.Employee_Car")
                         .Include("Employee.Employee_Country")
                         .FirstOrDefault(c => c.Id == companyID);

Должен быть более изящный путь! Это долго обветрено и генерирует ужасающий SQL

Я использую EF4 с VS 2010

167
задан Mafii 28 April 2016 в 13:09
поделиться

2 ответа

Используйте методы расширения . Замените NameOfContext именем контекста вашего объекта.

public static class Extensions{
   public static IQueryable<Company> CompleteCompanies(this NameOfContext context){
         return context.Companies
             .Include("Employee.Employee_Car")
             .Include("Employee.Employee_Country") ;
     }

     public static Company CompanyById(this NameOfContext context, int companyID){
         return context.Companies
             .Include("Employee.Employee_Car")
             .Include("Employee.Employee_Country")
             .FirstOrDefault(c => c.Id == companyID) ;
      }

}

Тогда ваш код станет

     Company company = 
          context.CompleteCompanies().FirstOrDefault(c => c.Id == companyID);

     //or if you want even more
     Company company = 
          context.CompanyById(companyID);
192
ответ дан 23 November 2019 в 20:59
поделиться

Как составить запрос LINQ to Entities для загрузки дочерних объектов напрямую, вместо вызова свойства Reference или Load()

Другого пути нет - разве что реализовать ленивую загрузку.

Или ручная загрузка....

myobj = context.MyObjects.First();
myobj.ChildA.Load();
myobj.ChildB.Load();
...
5
ответ дан 23 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: