Как показать значения трех таблиц с внешним ключом, связанным в таблице, используя сущность платформы C #? - PullRequest
0 голосов
/ 07 декабря 2018

Привет всем, я новичок в entity и asp.net MVC. Я использую код структуры сущностей вначале с уже созданной базой данных. Я хочу показать данные трех таблиц в таблице, используя внутреннее соединение, и не знаю, как это сделать

я пробовал следующий код, приведенный ниже

 public List<NewGroupRoles> GetAllGroups()
    {

        try
        {
            using(var p=new VMSDBContext())
            {
                var group = (from group_role in p.group_roles
                             join groups in p.groups on group_role.group_id equals groups.group_id
                             join roles in p.roles on group_role.roles_id equals roles.role_id
                             select new
                             {
                                 Id = group_role.group_roles_id,
                                 group_name = groups.group_name,
                                 group_role = roles.role_name
                             }).ToList();


            }

        }
        catch(Exception ex)
        {
            return new List<NewGroupRoles>();
        }
    }

я хочу вернуть его из функции в модели

классы модели этот класс определяет все классы сущностей базы данных

это групповая таблица

[это класс групповой роли ] [3]

ролькласс

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы пытаетесь выполнить работу, которую EF должен сделать для вас.

Похоже, у вас есть отношения многие ко многим между таблицами groups и roles.Почему бы вам не удалить класс group_roles и просто определить свойства навигации

public virtual IEnumerable<roles> roles { get; set; }

в groups классе модели и

public virtual IEnumerable<groups> groups { get; set; }

в roles классе модели

и получите список групп и ролей следующим образом:

var groupRoles = p.groups.SelectMany(g=>g.roles, (g,r)=>new {Group = g.group_name, Role = r.role_name}).ToList();

Или если вы используете EF Core, который еще не поддерживает отношения многие-ко-многим без промежуточного класса модели или просто настаивает на том, чтобыПромежуточный класс group_roles в вашей модели, вы можете определить в нем два свойства навигации, что-то вроде этого:

public class group_roles
{
    [Key]
    public int group_roles_id { get; set; }

    [ForeignKey("groups")]
    public int group_id { get; set; }

    [ForeignKey("roles")]
    public int role_id { get; set; }

    public virtual groups group { get; set; }
    public virtual roles role { get; set; }
}

Тогда ваш запрос просто

var groupRoles = p.group_roles.Select(gr=> new {gr.group_roles_id, Group=gr.group.group_name, Role=gr.role.role_name).ToList();
0 голосов
/ 07 декабря 2018

Используйте это как новый объект при выборе

public List<NewGroupRoles> GetAllGroups()
            {

                try
                {
                    using(var p=new VMSDBContext())
                    {
                        var group = (from group_role in p.group_roles
                                     join groups in p.groups on group_role.group_id equals groups.group_id
                                     join roles in p.roles on group_role.roles_id equals roles.role_id
                                     select new NewGroupRoles()
                                     {
                                         Id = group_role.group_roles_id,
                                         group_name = groups.group_name,
                                         group_role = roles.role_name
                                     }).ToList();


                    }

                }
                catch(Exception ex)
                {
                    return new List<NewGroupRoles>();
                }
       return group;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...