如何获取父实体框架的子项

时间:2019-03-16 23:51:34

标签: c# entity-framework

我有3张桌子

Inventarios -> Localizacoes -> Etiquetas

从左到右都有一对多的关系

问题是我似乎无法到达Etiquetas

// GET: api/Inventarios
public IQueryable<Inventario> GetInventarios()
{
    var inventarios = db.Inventarios.Include(i => i.Localizacoes.Select(l => 
                                                 l.Etiquetas.SelectMany(e => e.Numero)));
    return inventarios;
}

这是模型

public class Inventario
{
    public int InventarioID { get; set; }
    public string Colaborador { get; set; }
    public string Armazem { get; set; }
    public decimal Total { get; set; }
    public DateTime Data { get; set; }

    public ICollection<Localizacao> Localizacoes { get; set; }
}

public class Localizacao
{
    public int LocalizacaoID { get; set; }
    public string Referencia { get; set; }
    public int EtiquetasPorInventariar { get; set; }
    public int EtiquetasInventariadas { get; set; }
    public bool IsValid { get; set; }
    public decimal Precisao { get; set; }

    public int InventarioID { get; set; }
    public Inventario Inventario { get; set; }

    public ICollection<Etiqueta> Etiquetas{ get; set; }
}

public class Etiqueta
{
    public int EtiquetaID { get; set; }
    public string Numero { get; set; }

    public int LocalizacaoID { get; set; }
    public Localizacao Localizacao { get; set; }
}

这是我从api请求在浏览器控制台上获得的异常

  

“包含路径表达式必须引用导航属性   在类型上定义。使用虚线路径进行参考导航   属性和用于集合导航的Select运算符   属性。”

1 个答案:

答案 0 :(得分:1)

我的假设是您正在使用IQueryable来提供 OData 支持

此外,我在这里看到的2件东西看起来不太正确

第一个是SelectMany,它应该是Select

var inventarios = db.Inventarios.Include(i => i.Localizacoes.Select(l => 
                                             l.Etiquetas.Select(e => e.Numero)));

第二,是您要返回IQueryable,我不确定这是否会遍历对象图。

作为测试,您可以执行以下操作

return inventarios.ToList().AsQuerable();