Как получить все роли пользователей при использовании сущности - PullRequest
0 голосов
/ 27 сентября 2011

Я использую структуру сущностей и членство в моем приложении asp.net.

На одной из страниц мне нужно показать всех пользователей и их роли, соединив таблицы «aspnet_Membership», «aspnet_Users», «aspnet_Roles» и «aspnet_UsersInRoles».

Но всякий раз, когда я пытаюсь добавить все эти таблицы в .edmx, сущность "aspnet_UsersInRoles" не создается, вместо этого "aspnet_Users" и "aspnet_Roles" связываются с ассоциацией "многие ко многим". И я не могу ссылаться на таблицу aspnet_UsersInRoles, она выдает ошибку компиляции.

Пожалуйста, помогите мне получить роли пользователя, это мой запрос ссылки

var users = (from membership in IAutoEntity.aspnet_Membership
                                from user in IAutoEntity.aspnet_Users
                                from role in IAutoEntity.aspnet_Roles
                                where membership.IsApproved == true & membership.UserId == user.UserId 
                                select new { user.UserName, membership.Email, user.aspnet_Roles.TargetRoleName, membership.CreateDate, user.LastActivityDate, membership.IsApproved }).ToList();

1 Ответ

1 голос
/ 27 сентября 2011

Предполагая, что EF моделирует ассоциацию "многие ко многим" со свойством навигации, называемым aspnet_Roles в пользовательском классе, ваш запрос linq почти верен.Единственная проблема - user.aspnet_Roles.TargetRoleName, когда вы пытались включить много значений (для имен ролей) для каждого пользователя в ваш выбор.

Помните, что у вас много ролей на пользователя.Таким образом, вы можете попробовать выбрать как

select new { user.UserName, membership.Email, user.aspnet_Roles, membership.CreateDate ...

Обратите внимание, что вы получите коллекцию ролей для каждого пользователя, т.е. users[0].aspnet_roles будет коллекцией.

Если есть гарантия, что с пользователем всегда будет связана одна роль, вы можете использовать такой синтаксис, как

select new { user.UserName, membership.Email, user.aspnet_Roles.First().TargetRoleName, membership.CreateDate ...

Обратите внимание, что мы выбираем имя первой роли от ролей, связанных с пользователем.Если для пользователя нет роли, метод First() выдаст исключение.Кроме того, я не уверен, будет ли достаточно выбрать только имя первой роли с точки зрения логики приложения.

...