Стремление загрузить полную иерархию из самоссылающейся таблицы, не используя ее первичный ключ

Я пытаюсь загрузить иерархические данные из самоссылающейся таблицы, которая не использует свой первичный ключ. Так что этот ответ кажется неприменимым.

У меня есть следующая таблица fleetdetail, содержащая иерархические данные.

Вы можете видеть, что таблица не ссылается сама на себя по своему первичному ключу fleetdetailid.

Вместо этого используются fleetchhildid и fleeid. См. значения, выделенные жирным шрифтом, чтобы понять концепцию.

fleetdetailid fleetid fleetname fleetchildid childname
76234 12327 Direction Générale Adjointe Ressources Humaines et Moyens Technique 12328 Patrimoine bâti & logistique technique
76235 12328 Patrimoine bâti & logistique technique 12329 Gestion domaniale
76236 12328 Patrimoine bâti & logistique technique 12330 Ateliers Parc Auto
76239 12328 Patrimoine bâti & logistique technique 12333 Manifestations & Festivités
76241 12328 Patrimoine bâti & logistique technique 12335 Mission Entretien et Assurances
76248 12328 Patrimoine bâti & logistique technique 12342 Entretien Bâtiments
76249 12342 Entretien Bâtiments 12344 Cellule EPI
76257 12342 Entretien Bâtiments 12351 Cellule Electricité
76242 12335 Mission Entretien et Assurances 12336 Concierge
76243 12335 Mission Entretien et Assurances 12337 Agent d'entretien polyvalent du bâtiments
76240 12333 Manifestations & Festivités 12334 Fontainier
76237 12330 Ateliers Parc Auto 12331 Astreinte dépannage
76238 12330 Ateliers Parc Auto 12332 Astreinte Viabilité Hivernale

Таблица флота здесь:

fleetid fleetname
12327 Direction Générale Adjointe Ressources Humaines et Moyens Technique
12328 Patrimoine bâti & logistique technique
12330 Ateliers Parc Auto
12333 Manifestations & Festivités
12335 Mission Entretien et Assurances
12342 Entretien Bâtiments
12344 Cellule EPI
12351 Cellule Electricité
12336 Concierge
12337 Agent d'entretien polyvalent du bâtiments
12334 Fontainier
12331 Astreinte dépannage
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);

Он возвращает набор результатов без заполненных свойств навигации.


person Olivier MATROT    schedule 22.07.2021    source источник