2014-10-31 62 views
0

一个实体的儿童我有一个实体,称为抓取实体框架

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

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

我可以在实体上获取ICollection以获取我的儿童吗?

+0

可能重复相关[如何为包括实体框架5个孩子对象的子对象]记录(http://stackoverflow.com/questions/13047845/how- to-include-a-child-objects-child-object-in-entity-framework-5) – Kritner 2014-10-31 11:45:20

回答

0

是的,你需要在你的性对象的子集:

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

,并记得要加.Include(q => q.Children)到您的LINQ查询加载孩子。

+1

我必须写流利的api,因为这不起作用 – 2014-10-31 12:10:39

+0

你可以但你不需要。尝试让你的实体首先正确加载。然后当你有它的工作添加孩子的集合,并在查询和'包括'来加载儿童。还要记得在构造函数中初始化你的集合。如果这不能回答你的问题,请提供更多详细信息,以便我更好地理解。 – Wojciech 2014-10-31 13:46:21

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 
+0

如何获得儿童资产的所有儿童 – 2014-11-03 05:30:58

+0

使用var allSubchild = this.Children.SelectMany(c => c.Children); – xwrs 2014-11-03 09:18:46

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

这将拉动与的