C# 实体框架中实体的多个引用
这是我的模型附件 现在你们可以看到,员工可以拥有很多技能,然后员工技能可以包含技能和技能等级 我想写一个查询,在其中我想访问所有表中的所有相关数据 下面是我的疑问C# 实体框架中实体的多个引用,c#,asp.net-mvc,linq,entity-framework-6,C#,Asp.net Mvc,Linq,Entity Framework 6,这是我的模型附件 现在你们可以看到,员工可以拥有很多技能,然后员工技能可以包含技能和技能等级 我想写一个查询,在其中我想访问所有表中的所有相关数据 下面是我的疑问 _context.Employees.include(e=>e.EmployeesSkills.select(s=>s.Skill)); 此查询将仅包括employee=>EmployeesSkills==>Skill如何在同一查询中包括SkillLevel以访问所有相关表中的数据。采用表达式的include扩展方
_context.Employees.include(e=>e.EmployeesSkills.select(s=>s.Skill));
此查询将仅包括employee=>EmployeesSkills==>Skill如何在同一查询中包括SkillLevel以访问所有相关表中的数据。采用
表达式的include
扩展方法重载只能理解仅使用属性访问和选择方法。要包含具有更复杂关系的实体,需要使用重载,该重载接受字符串。在您的情况下,它将如下所示:
_context.Employees.Include("EmployeesSkills.Skill").Include("EmployeesSkills.SkillLevel");
编辑:
实际上,对于强类型版本的Include
,您想要做的事情看起来并不太复杂。这应该起作用:
_context.Employees.Include(e => e.EmployeesSkills.Select(s => s.Skill))
.Include(e => e.EmployeesSkills.Select(s => s.SkillLevel));
所以,如果你有任何解决方案,我该怎么做?请与我分享。因为他想要两种类型,我认为应该是\u context.Employees.Include(“EmployeesSkills.Skill”)。Include(“EmployeesSkills.SkillLevel”)代码>(或导航属性的名称)@ScottChamberlain,是的,错过了。答案已更新。@SteveRubleInclude
还了解导航嵌套集合的SelectMany
扩展方法。@ScottChamberlain,你说得对。我只是假设SkillLevel
没有Skill
,否则为什么不把Include
链接起来呢?我猜这是个错误的假设。@SimonBelanger,他们在EF6.0中添加了这个吗?我刚刚在EF5.0中试过,它给了我一个错误。