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

本文关键字:实体 查找 自引用 | 更新日期: 2023-09-27 17:59:47

在实体框架中,如何搜索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; }
}

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

我想我在这里找到了答案。。。自参考表

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

最初我试图向子组件添加外键,但实际上我需要在父关系上添加FK。现在我的EF查询如下。。。

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