在实体框架中获取实体的子项

时间:2014-10-31 11:37:32

标签: c# entity-framework

我有一个名为

的实体
Public  Class Equipment
{
    int Id;
    string EquipmentName;
    int? ParentEquipmentId;
}

拥有这个实体,设备可以有父子关系。 我想获取父设备以及与之相关的设备的所有子设备。

我可以在实体上使用ICollection来获取孩子吗?

3 个答案:

答案 0 :(得分:2)

Public  Class Equipment
{
    int Id;
    string EquipmentName;
    int? ParentEquipmentId;
    virtual Equipment Parent;
    Virtual ICollection<Equipment> Childrens
}

模型绑定器使用流畅的api

   this.HasOptional(e => e.Parent)
                .WithMany(e => e.Children)
                .HasForeignKey(m => m.ParentEquipmentId);

这将拉出与

相关的记录

答案 1 :(得分:0)

是的,您需要在对象中包含儿童的集合:

public virtual ICollection<Equipment> Children { get; set; }

并记得在您的linq查询中添加.Include(q => q.Children)以加载子项。

答案 2 :(得分:0)

似乎你需要这样的东西(不是精确的语法)

父母与子女的财产:

public Equipment Parent 
{
    get 
    {
        return dataContext.DbSet<Equipment>().SingleOrDefault(e=>e.Id == this.ParentEquipmentId);
    }
}

public IEnumerable<Equipment> Children 
{
    get 
    {
        return dataContext.DbSet<Equipment>().Where(e=>e.ParentEquipmentId == this.Id);
    }
}

并使用您的Parent属性获取此特定父级的所有子设备:

this.Parent.Children