首页 > 解决方案 > 渴望从不使用其主键的自引用表中加载完整的层次结构

问题描述

我正在尝试从不使用其主键的自引用表中加载分层数据。所以这个答案似乎不适用。

我有下表包含分层数据的舰队详细信息

您可以看到该表不是通过其主键fleetdetailid自我引用的

相反,它使用的是fleetchildidfleeid。请参阅粗体值以了解该概念。

车队详情 稍纵即逝 舰队名称 小孩子 子名
76234 12327 指导 Générale Adjointe Ressources Humaines et Moyens 技术 12328 Patrimoine bâti & logistique 技术
76235 12328 Patrimoine bâti & logistique 技术 12329 管辖权
76236 12328 Patrimoine bâti & logistique 技术 12330 Ateliers Parc Auto
76239 12328 Patrimoine bâti & logistique 技术 12333 表现形式和庆祝活动
76241 12328 Patrimoine bâti & logistique 技术 12335 Mission Entretien et Assurances
76248 12328 Patrimoine bâti & logistique 技术 12342 Entretien Bâtiments
76249 12342 Entretien Bâtiments 12344 细胞外延
76257 12342 Entretien Bâtiments 12351 Cellule Electricité
76242 12335 Mission Entretien et Assurances 12336 门房
76243 12335 Mission Entretien et Assurances 12337 Agent d'entretien polyvalent du bâtiments
76240 12333 表现形式和庆祝活动 12334 方泰尼尔
76237 12330 Ateliers Parc Auto 12331 严格的分工
76238 12330 Ateliers Parc Auto 12332 Astreinte Viabilité Hivernale

舰队表在这里:

稍纵即逝 舰队名称
12327 指导 Générale Adjointe Ressources Humaines et Moyens 技术
12328 Patrimoine bâti & logistique 技术
12330 Ateliers Parc Auto
12333 表现形式和庆祝活动
12335 Mission Entretien et Assurances
12342 Entretien Bâtiments
12344 细胞外延
12351 Cellule Electricité
12336 门房
12337 Agent d'entretien polyvalent du bâtiments
12334 方泰尼尔
12331 严格的分工
12332 Astreinte Viabilité Hivernale

实体如下:

public partial class Fleet
{
        public Fleet()
        {
                FleetDetailFleet = new HashSet<FleetDetail>();
                FleetDetailFleetChildNavigation = new HashSet<FleetDetail>();
                AdditionalInit();
        }
        public int FleetId { get; set; }
        public string Name { get; set; }

        public virtual ICollection<FleetDetail> FleetDetailFleet { get; set; }
        public virtual ICollection<FleetDetail> FleetDetailFleetChildNavigation { get; set; }

        partial void AdditionalInit();
}


public partial class FleetDetail
{

    public int FleetDetailId { get; set; }

    public int FleetId { get; set; }

    public string FleetName { get; set; }

    public int? FleetChildId { get; set; }

    public string ChildName { get; set; }
    
    public virtual Fleet Fleet { get; set; }

    public virtual Fleet FleetChildNavigation { get; set; }
}

我尝试了以下 EF 查询,但它不起作用:

 var tree = context.FleetDetail
.Include(fd => fd.FleetChildNavigation)
.ThenInclude(f => f.FleetDetailFleetChildNavigation).AsEnumerable()
.Where(fd => fd.FleetChild == null);

它返回一个没有填充导航属性的结果集。

标签: entity-framework-coreef-core-3.1

解决方案


推荐阅读