Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
minkovia
0 / 0 / 0
Регистрация: 11.01.2015
Сообщений: 17
1

Данные из разных таблиц в одном представлении

27.02.2016, 11:03. Просмотров 1182. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Есть 4 модели:
C#
1
2
3
4
5
6
7
8
9
[Table("Users")]
    public class User
    {
        [Key]
        public int UserId { get; set; }
        public string UserName { get; set; }
 
        public virtual ICollection<UserORGRole> UserORGRoles { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
  [Table("Roles")]
    public class Role
    {
        [Key]
        public int RoleId { get; set; }
        public string RoleName { get; set; }
 
        public virtual ICollection<UserORGRole> UserORGRoles { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
    [Table("ORG")]
    public class ORG
    {
        [Key]
        public int ORGId { get; set; }
        public string Fullname { get; set; }
 
        public virtual ICollection<UserORGRole> UserORGRoles { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    [Table("UserORGRoles")]
    public class UserORGRole
    {
        [Key]
        public int UserORGRoleId { get; set; }
        public int UserId { get; set; }
        public short RoleId { get; set; }
        public int ORGId { get; set; }
 
        public virtual ORG ORG { get; set; }
        public virtual Role Role { get; set; }
        public virtual User User { get; set; }
    }
и представление:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
 @model IEnumerable<MVC5.Entities.User>
 <table>
 @foreach (var user in Model)
     {
     <tr>
         <td>@Html.DisplayFor(userdata => user.UserId)</td>
         <td>@Html.DisplayFor(userdata => user.UserName)</td>
         <td>@Html.DisplayFor(userdata => user.UserORGRoles.First().ORG.Fullname)</td>
         <td>@Html.DisplayFor(userdata => user.UserORGRoles.First().Role.RoleName)</td>
     </tr>
     }
</table>
Метод First() отображает только 1ый элемент последовательности. Как отобразить все элементы в случае если у пользователя больше одной роли и он состоит больше чем в одной организации?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2016, 11:03
Ответы с готовыми решениями:

Добавление нескольких разных объектов в одном представлении
Добрый день, интересует следующее: Есть сущность &quot;Объявление&quot; которое содержит идентификатор...

Как реализовать отображение 3х таблиц бд в одном представлении
Есть 3 таблицы базы данных: Products, Category и Bonus. Их описываю 3 модели соответственно ...

asp и данные разных таблиц одной БД
есть бд (access) (одна таблица с фамилиями(1) и одна таблица с изображениями (именами файлов)- (2)....

Несколько моделей в одном представлении
Здравствуйте! Только начал разбираться в ASP.NET MVC. Нужно сделать страницу, на которой будет...

Как отобразить 2 модели в одном представлении
Добрый день. У меня вопрос... Я сделала 2 модели данных, соответственно 2 таблички в БД, 2...

3
IamRain
1413 / 1258 / 397
Регистрация: 02.08.2011
Сообщений: 3,730
27.02.2016, 11:33 2
Лучший ответ Сообщение было отмечено minkovia как решение

Решение

Цитата Сообщение от minkovia Посмотреть сообщение
если у пользователя больше одной роли
Для начала бы вам надо грамотно составить модели. У вас два отношения many-to-many.
1.) Users - Roles. Для данного отношения модели должны иметь вид:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Table("Roles")]
    public class Role
    {
        [Key]
        public int RoleId { get; set; }
        public string RoleName { get; set; } 
        public virtual ICollection<User> Users { get; set; }
       // init collection in constructor
    }
 
[Table("Users")]
    public class User
    {
        [Key]
        public int UserId { get; set; }
        public string UserName { get; set; }
 
        public virtual ICollection<Role> Roles { get; set; }
         // init collection in constructor
    }
2.) Users - ORG. В одной организации может быть несколько пользователей, и один пользователь может состоять в нескольких организациях. Отсюда обновляем имеющиеся модели:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class User
    {
        [Key]
        public int UserId { get; set; }
        public string UserName { get; set; }
 
        public virtual ICollection<Role> Roles { get; set; }
        public virtual ICollection<ORG> Organizations {get;set;}
        // init collections in constructor
    }
 
 
[Table("ORG")]
    public class ORG
    {
        [Key]
        public int ORGId { get; set; }
        public string Fullname { get; set; }
 
         // init collection in constructor
        public virtual ICollection<User> Users { get; set; }
    }
Вот это:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[Table("UserORGRoles")]
    public class UserORGRole
    {
        [Key]
        public int UserORGRoleId { get; set; }
        public int UserId { get; set; }
        public short RoleId { get; set; }
        public int ORGId { get; set; }
 
        public virtual ORG ORG { get; set; }
        public virtual Role Role { get; set; }
        public virtual User User { get; set; }
    }
Что это за каша тут? А если будет больше связей many-to-many?
Если уж есть желание создавать кастомные join-таблицы (с более чем двумя полями), то нужно явно прописывать для join-таблицы две связи 1-to-many в обе стороны.

Даже если вы не исправите ваш код, то просто перечисляйте во вьюхе, вот эту коллекцию ваших каш:
Что-то типа того:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@foreach (var user in Model)
     {
     <tr>
            ....
               if( user.UserORGRoles.Count()>1)
                  {  
                     foreach(var userorgrole in user.UserOrgRoles)
                                  { 
                                         // do any
                                   }
                   }
            ....
     </tr>
     }
</table>
Добавлено через 8 минут
Вот шпаргалка, как надо формировать модели при отношении many-to-many: ef m-n relationship
1
minkovia
0 / 0 / 0
Регистрация: 11.01.2015
Сообщений: 17
28.02.2016, 11:19  [ТС] 3
Спасибо Вам за ответ!
0
IamRain
1413 / 1258 / 397
Регистрация: 02.08.2011
Сообщений: 3,730
28.02.2016, 11:24 4
Пожалуйста.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2016, 11:24

Несколько моделей в одном представлении: возможно ли
Возможно ли (и правильно ли) отображать в представлении несколько моделей? Или сама MVC требует...

Отображение разных таблиц из БД в одном dataGridView
всем доброго времени суток! есть БД, dataGridView на форме. в конструкторе в dataGridView через...

Выгрузка данных с разных таблиц в одном запросе
Подскажите как сделать. Есть две таблицы: Users и UserData. В таблице UserData есть ссылка на id ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru