【问题标题】:Using LINQ to query three entitites. - Include path expression must refer to a navigation property defined on the type使用 LINQ 查询三个实体。 - 包含路径表达式必须引用在类型上定义的导航属性
【发布时间】:2014-10-15 03:02:29
【问题描述】:

我正在尝试从 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=包含路径表达式必须引用一个 在类型上定义的导航属性。使用虚线路径 参考导航属性和用于集合的 Select 运算符 导航属性。参数名称:路径

谁能告诉我我做错了什么。这是我的课程:

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; }
}

【问题讨论】:

  • 错误消息告诉你确切地你做错了什么。把整本书读到最后。

标签: c# asp.net asp.net-mvc linq entity-framework


【解决方案1】:

使用Select 而不是SelectMany:

  .Include(e => e.Objectives.Select(o => o.ObjectiveDetails))

【讨论】:

    【解决方案2】:

    试试这个:

    var result = await db.Exams
        .Include("Objectives.ObjectiveDetails")
        .Where(e => e.Name == name)
        .FirstOrDefaultAsync();
    

    来自http://msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx

    查询路径可用于实体 SQL 和 LINQ 查询。路径是 包罗万象。

    例如,如果包含调用指示 Include("Orders.OrderLines"),不仅会包含OrderLines, 还有订单。有关详细信息,请参阅塑造查询结果 (实体框架)。

    【讨论】:

    • 抱歉,这根本不起作用。 VS2013 智能感知不允许我像这样添加 ObjectiveDetails “e => e.Objectives.ObjectiveDetails.
    • @Anne 是一个字符串文字。编辑:我的意思是它确实有效。你打错了或者没看懂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多