Это может быть действительно 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
Используйте методы расширения . Замените 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);
Другого пути нет - разве что реализовать ленивую загрузку.
Или ручная загрузка....
myobj = context.MyObjects.First();
myobj.ChildA.Load();
myobj.ChildB.Load();
...