Я использую Entity Framework и имею таблицу BusinessUnits, которая может ссылаться на другую запись того же типа, чтобы сформировать иерархию дочернего родителя.
У меня также есть набор пользователей и пользовательские разрешения, в которых каждый пользователь, определенный в этой таблице, должен иметь доступ к BusinessUnit и всем подразделениям бизнес-подразделения в иерархии. Пользователи не должны иметь доступ к BusinessUnit над ссылкой (если существует).
Как я могу начать формирование запросов LINQ для обработки этого дерева привязки с привязкой и вернуть все бизнес-единицы (с дочерними блоками), для которых этот пользователь имеет доступ? Возможно ли это сделать в одном запросе или мне нужно вручную создать дерево с помощью цикла for?
Я видел ссылку схемы таким образом от node до родителя, означает ли это, что мне нужно начинать с самого дальнего дочернего node, чтобы построить дерево одним родителем за раз?
Спасибо заранее,
Крис
class BusinessUnit
{
int BusinessUnitID {get;set;}
public string BusinessName {get;set;}
BusinessUnit ParentBusinessUnit {get;set;}
}
class User
{
int UserID {get;set;}
string Firstname {get;set;}
}
class UserPermissions
{
[Key, ForeignKey("BusinessUnit"), Column(Order = 0)]
BusinessUnit BusinessUnit {get;set;}
[Key, ForeignKey("User"), Column(Order = 1)]
User User {get;set;}
}
IEnumerable<BusinessUnit> GetUnitsForWhichUserHasAccess(User user)
{
/* Example 1
given: BusinessUnitA (ID 1) -> BusinessUnitB (ID 2) -> BusinessUnitC (ID 3)
with user with ID 1:
and UserPermissions with an entry: BusinessUnit(2), User(1)
the list { BusinessUnitB, BusinessUnitC } should be returned
*/
/* Example 2
given: BusinessUnitA (ID 1) -> BusinessUnitB (ID 2) -> BusinessUnitC (ID 3)
with user with ID 1:
and UserPermissions with an entry: BusinessUnit(1), User(1)
the list { BusinessUnitA, BusinessUnitB, BusinessUnitC } should be returned
*/
}