2014-09-03 2 views
0

Вот моя модель прилагается.Несколько ссылок на объекты в инфраструктуре Entity

enter image description here

Теперь здесь, как вы можете видеть Служащие может иметь много количества навыков, то EmployeeSkill может иметь содержать умения и уровень умения.

Я хочу написать запрос, в котором я хочу, чтобы получить доступ ко всем связанным данным из всех таблиц

Say здесь запрос ниже

_context.Employees.include(e=>e.EmployeesSkills.select(s=>s.Skill)); 

этот запрос будет включать только сотрудник => EmployeesSkills ==> Как я могу включить SkillLevel в этот же запрос для доступа к данным из всех связанных таблиц.

+0

так как я могу это сделать Если у вас есть какое-либо решение plz поделитесь со мной. – ProgrammingNinja

ответ

2

Метод перегрузки Include, который принимает Expression<Func<T,U>>, может понимать только простейшие пути навигации, которые используют только доступ к свойствам и метод Select. Чтобы включить объекты с более сложными отношениями, вам нужно использовать перегрузку, которая принимает строку. В вашем случае, это будет выглядеть следующим образом:

_context.Employees.Include("EmployeesSkills.Skill").Include("EmployeesSkills.SkillLevel"); 

Edit:

На самом деле, это не выглядит как то, что вы хотите сделать, это слишком сложно для сильно типизированных версии Include. Это должно сработать:

_context.Employees.Include(e => e.EmployeesSkills.Select(s => s.Skill)) 
        .Include(e => e.EmployeesSkills.Select(s => s.SkillLevel)); 
+0

Поскольку он хочет два типа, я думаю, что это должно быть '_context.Employees.Include (« EmployeesSkills.Skill »). Включить (« EmployeesSkills.SkillLevel »);' (или независимо от свойства навигации) –

+0

@ScottChamberlain, yep, пропустил это. Ответ обновлен. –

+0

@SteveRuble 'Include' также понимает метод расширения SelectMany для навигации вложенных коллекций. –

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