Я использую EF 7.0.0.0-rc1-final.
У меня есть древовидная структура с отношениями «один ко многим» от GrandGrandParent к GrandParent к Parent к Child:
public class GrandGrandParent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual List<GrandParent> GrandParents { get; set; }
public GrandGrandParent()
{
this.GrandParents = new List<GrandParent>();
}
}
public class GrandParent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual GrandGrandParent GrandGrandParent { get; set; }
public virtual List<Parent> Parents { get; set; }
public GrandParent()
{
this.Parents = new List<Parent>();
}
}
public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual GrandParent GrandParent { get; set; }
public virtual List<Child> Children { get; set; }
public Parent()
{
this.Children = new List<Child>();
}
}
public class Child
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Parent Parent { get; set; }
}
Как с помощью EF Core 1.0 (EF 7) создать запрос LINQ (или с подзапросами), который даст мне все дерево с учетом определенного идентификатора прапрародителя?
Я могу .Include() на один уровень вверх или вниз, может быть, я слеп для очевидного? Это дает мне GrandGrandParent и список GrandParents:
var ggparent1 = from ggp in myDbContext.GrandGrandParent
.Include(ggp => ggp.GrandParents)
where ggp.ID == 2
select ggp;
Я хочу получить все дерево, вплоть до списка детей. Должен ли я прибегать к коду цикла foreach() и вручную строить дерево?
HierarchyIDв EF6 с неограниченным уровнем. Наличие 1 таблицы делает большинство ваших запросов очень простыми. Каждая строка должна иметьParentID, относящуюся к идентификатору строки в таблице с корневыми узлами, имеющими это какnull. - person Mohsen Afshin   schedule 01.08.2016