[英]The Include path expression must refer to a navigation property defined on the type (select data using LINQ)
[英]Using LINQ to query three entitites. - Include path expression must refer to a navigation property defined on the type
我正在尝试从3个实体获取数据。 考试,目的和目的细节。 我希望能够通过考试名称来选择它。 这是我正在使用的代码:
var result = await db.Exams
.Include(e => e.Objectives)
.Include(e => e.Objectives.SelectMany(o => o.ObjectiveDetails))
.Where(e => e.Name == name)
.FirstOrDefaultAsync();
当我运行它时,这给我一个错误消息:
exceptionMessage =包含路径表达式必须引用在类型上定义的导航属性。 使用虚线路径作为参考导航属性,使用“选择”运算符作为集合导航属性。 参数名称:路径
有人可以告诉我我在做什么错。 这是我的课程:
public class Exam
{
public Exam()
{
this.Objectives = new HashSet<Objective>();
}
public int ExamId { get; set; }
public int SubjectId { get; set; }
public virtual ICollection<Objective> Objectives { get; set; }
}
public class Objective : AuditableTable
{
public Objective()
{
this.ObjectiveDetails = new HashSet<ObjectiveDetail>();
}
public int ObjectiveId { get; set; }
public int ExamId { get; set; }
public int Number { get; set; }
public virtual Exam Exam { get; set; }
public virtual ICollection<ObjectiveDetail> ObjectiveDetails { get; set; }
}
public partial class ObjectiveDetail
{
public int ObjectiveDetailId { get; set; }
public int ObjectiveId { get; set; }
public int Number { get; set; }
public string Text { get; set; }
public virtual Objective Objective { get; set; }
}
使用Select
而不是SelectMany:
.Include(e => e.Objectives.Select(o => o.ObjectiveDetails))
尝试这个:
var result = await db.Exams
.Include("Objectives.ObjectiveDetails")
.Where(e => e.Name == name)
.FirstOrDefaultAsync();
来自http://msdn.microsoft.com/zh-cn/library/bb738708(v=vs.110).aspx
查询路径可以与Entity SQL和LINQ查询一起使用。 路径是包罗万象的。
例如,如果一个include调用指示Include(“ Orders.OrderLines”),则不仅将包括OrderLines,还将包括Orders。 有关更多信息,请参见对查询结果进行整形(实体框架)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.