[EF]. Иерархии с нефиксированной глубиной в Entity Framework
От: alexdr Россия  
Дата: 09.02.09 22:34
Оценка:
Привет всем!

Я новичок в EF. Помогите пожалуйста найти решение для работы с иерархиями с нефиксированной глубиной в EF. Имеется иерархическая таблица:

CREATE TABLE [dbo].[Department](
    [DepartmentID] [int] IDENTITY(1,1) NOT NULL,
    [OrganizationID] [int] NULL,
    [Name] [nvarchar](50),
    [ShortName] [nvarchar](50) NULL,
    [ParentID] [int] NULL,
CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED 
(
    [DepartmentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[Department]  WITH CHECK ADD  CONSTRAINT [FK_Department_Department] FOREIGN KEY([ParentID])
REFERENCES [dbo].[Department] ([DepartmentID])

ALTER TABLE [dbo].[Department]  WITH CHECK ADD  CONSTRAINT [FK_Department_Organization] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])



При вызове метода

using (someEntities app = new someEntities())
{
    List<Department> departments = someEntities.Departments.ToList();
}


получаю List<Department> с приблизительно такой древовидной структурой:


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

using (someEntities app = new someEntities())
{
    List<Department> departments = (someEntities.Departments
                    .Include("Children.Children")
                    .Where(e => e.Parent == null)).ToList();
}


Вопрос заключается в том, как получить сразу правильное дерево для иерархии с нефиксированной (заранее неизвестной) глубиной?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.