Использование Linq to Entities для получения списка ролей пользователя с самостоятельным присоединением

Я пытаюсь создать динамическое меню, которое использует роли Identity 2.0, чтобы определить, какие пункты меню должен видеть пользователь. Я очень новичок в C # и мне нужна помощь, пожалуйста!

Для того, что я делаю, я думаю о роли как о пункте меню, который пользователь может либо видеть, либо нет, в зависимости от назначенных им ролей. У меня есть два уровня пунктов меню - пункт родительского меню (например, «Отчеты» и пункты подменю (например, «Отчеты о заказах», «Отчеты о получении» и т. Д.).

Итак, мой класс ApplicationRole выглядит так:

public string Description { get; set; }
public string MenuTitle {get;set;}
public string MenuIcon { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }

public virtual ApplicationRole ParentRole { get; set; }

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

Итак, логика будет примерно такой:

  1. Получите список всех пунктов меню (ролей), которые пользователь назначил им.
  2. Используя этот список, используйте ParentRole, чтобы получить отдельный список родительских ролей (верхний уровень меню).
  3. Используя эти 2 списка, заполните мою модель представления ниже:

    public class NavigationViewModel
    {
    public int MenuId { get; set; }
    public string MenuName { get; set; }
    public string ControllerName { get; set; }
    public string ActionName { get; set; }
    public string MenuIcon { get; set; }
    public IEnumerable<NavigationViewModel> ChildMenuItems { get; set; }
    }
    

По сути, я создаю меню, в котором есть меню верхнего уровня и подменю.

Моя проблема в том, что я действительно не знаю, с чего начать с точки зрения запросов к базе данных. В идеале я хотел бы, чтобы запрос, который выполняет самостоятельное присоединение к таблице ролей, чтобы получить родительскую роль в том же запросе, однако я новичок в С# и Linq и не знаю, с чего начать.

Будем признательны любому совету.


person Lock    schedule 04.10.2014    source источник


Ответы (1)


Я бы посоветовал добавить ADO.NET Entity Data Model в ваш проект и добавить таблицы, которые вы хотите запрашивать из БД. Затем создается файл .edmx с вашими таблицами и их отношениями, и вы можете получить к ним доступ в своем коде (создается файл DbContext с вашим именем базы данных, например YouDBNameEntities).

Теперь, когда вы подключены к БД, создайте новый контекст:

Контекст YourDBNameEntities = new YourDBNameEntities();

После этого вы можете присоединиться к добавленным вами столам и, в вашем случае, присоединиться самостоятельно:

var Query = context.AddedTable.Join(context.AddedTable, ...)

or

var Query = from yourClassName1 в context.AddedTable

         join yourClassName2 in context.AddedTable on yourClass1.ID equals yourClass2.ID

         where !yourClassName1.ParentRole.equals(null)

         select new { ParentRole = yourClassName1.ParentRole }
person Raein Hashemi    schedule 04.10.2014