好的,我有三层实体,具有以下层次结构:课程 - >模块 - >章节
这是最初的EF LINQ声明:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)
现在,我想要包含另一个名为Lab的实体,该实体与课程相关联.
如何包含实验室实体?
我尝试了以下但它不起作用:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)
关于包含第二实体的任何想法?
任何建议或信息都将受到高度赞赏.谢谢!
我有一个存储库,可以获得'include'的lambda表达式.
public TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate, params Expression<Func<TEntity, object>>[] includePaths)
{
return Context.Set<TEntity>().Includes(includePaths).FirstOrDefault(predicate);
}
Run Code Online (Sandbox Code Playgroud)
在EF的早期版本中,我在服务层中使用它,例如:
var plan = _unitOfWork.PlanRepository
.FirstOrDefault(
p => p.Id == id,
include => include.PlanSolutions.Select(ps => ps.Solution)
);
Run Code Online (Sandbox Code Playgroud)
其中'PlanSolutions'是一个集合,'Solution'是一个嵌套在'PlanSolution'中的属性.
但是现在这段代码出错了:
InvalidOperationException:属性表达式'include => {来自[include]中的PlanSolutions ps..PlanSolutions select [ps] .Solution}'无效.表达式应表示属性访问:'t => t.MyProperty'.有关包含相关数据的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=746393.
现在看来我不能使用'Select'方法来获取多个级别包含,但我也不能使用Microsoft建议的'ThenInclude'方法,因为查询本身位于存储库内部,服务没有访问.有没有办法治愈它?