Мне сохранили древовидную структуру организационной схемы в базе данных. Что-то как
ID (int);
Name (String);
ParentID (int)
В C# это представлено классом как
class Employee
{
int ID,
string Name,
IList < Employee> Subs
}
Я задаюсь вопросом, как лучший способ состоит в том, чтобы получить эти значения от базы данных для заполнения Объектов C# с помощью LINQ (я использую Платформу Объекта),
Должно быть что-то лучше, чем звонок, чтобы заставить верхний уровень, затем выполняющий повторенные вызовы получать нижние индексы и так далее.
Как лучше всего сделать это?
]Я бы добавил поле к сущности для включения родительского идентификатора, а затем вытащил бы всю таблицу в память, оставив подраздел List нулевым. Затем пропустил бы итерацию по объектам и заполнил бы список, используя linq к объектам. Только один запрос к БД должен быть обоснован.[
].]Запрос структуры сущностей должен позволять включать связанные наборы сущностей, хотя и в унарном соотношении, но не уверен, как это будет работать...[
] []Проверьте это для получения более подробной информации: []http://msdn.microsoft.com/en-us/library/bb896272.aspx[][
]] Ну... даже с LINQ вам понадобится два запроса, потому что любой одиночный запрос будет дублировать главного сотрудника и таким образом приведет к созданию нескольких сотрудников (которые на самом деле являются одними и теми же).... Однако, это можно немного скрыть с помощью linq, когда вы создаете объект, то есть когда вы будете выполнять второй запрос, что-то вроде этого:[
] [var v = from u in TblUsers
select new {
SupervisorName = u.DisplayName,
Subs = (from sub in TblUsers where sub.SupervisorID.Value==u.UserID select sub.DisplayName).ToList()
};
] Если Вы используете SQL Server 2008, Вы можете воспользоваться новой функцией HIERARCHYID.
Организации в прошлом боролись с изображением дерева как структуры в базах данных, много соединяет в себе множество сложных логических элементов место, будь то организация иерархия или определение спецификации (BOM) (Bill of Материалы), где один готовый продукт зависит от другого полуфабриката материалы/комплекты и эти комплекты предметы зависят от другого полуфабриката готовые изделия или сырьевые материалы.
SQL Server 2008 имеет решение для проблема в том, что мы храним весь иерархия типа данных Иерархия. HierarchyID - это переменная тип данных системы длины. HierarchyID используется для определения местоположения в иерархия такого элемента, как Скотт генеральный директор и Марк, а также Рави докладывает Скотту, Бену и Лоре. отчитываться перед Марком, Виджеем, Джеймсом и Фрэнком. доложите Рави.
Поэтому используйте новые доступные функции и просто возвращайте необходимые данные без использования LINQ. Недостатком является то, что вам придется использовать UDF или хранимые процедуры для чего угодно, кроме простого корневого запроса:
SELECT @Manager = CAST('/1/' AS hierarchyid)
SELECT @FirstChild = @Manager.GetDescendant(NULL,NULL)