在自引用表中查找顶级实体

时间:2013-02-17 02:46:48

标签: c# linq entity-framework lambda

在Entity Framework中,如何搜索EF中顶级对象?

如果我有一组具有子组件的子组件。这些子组件可以放置在更大的组件中。

在一个现实世界的例子中:假设我们用计算机构建一个机柜,计算机有部件。如何找到未安装在机柜中的计算机,或者可能未安装在计算机中的部件?

public class Component
{
    public int Id { get; set; }
    public string Model { get; set; }
    public string PartId { get; set; }
    public DateTime Manufactured { get; set; }
    public string SerialNumber { get; set; }
    public string ProductType { get; set; }
    public string Description { get; set; }
    public virtual List<Component> SubComponents { get; set; }
}

1 个答案:

答案 0 :(得分:3)

我想我在这里找到了答案...... Self Referencing Tables

public class Component
{
    [Key]
    public int Id { get; set; }
    public string Model { get; set; }
    public string PartId { get; set; }
    public DateTime Manufactured { get; set; }
    public string SerialNumber { get; set; }
    public string ProductType { get; set; }

    //Added this...
    public int? ParentComponentId { get; set; }
    [ForeignKey("ParentComponentId")]
    public virtual Component ParentComponent { get; set; }

    public virtual List<Component> SubComponents { get; set; }
    public string Description { get; set; }
}

最初我试图向SubComponents添加一个外键,但实际上我需要在父关系上使用FK。现在我的EF查询看起来像这样......

return _db.Components.Where(x => x.ParentComponent == null).ToList();