35

Edit: Этот вопрос устарелКак получить список пользователей из идентификатора ASP.NET?

Параметр Identity Framework была движущаяся цель в данный момент я спросил это. Авторы изменили немало вещей, и они разделили несколько вещей, упростив ситуацию.

Посмотрите на Asp.NET Identity Sample project on github.


Я создаю небольшое приложение, требующее управления пользователями. Регистрация запрещена, вместо этого есть суперпользователь, который будет создавать и изменять регистрационную информацию.

Я использую новую систему членства в системе ASP.NET Identity, и, конечно же, создание пользователей и добавление ролей легко и интуитивно понятно.

Теперь, мой вопрос: Как получить список пользователей, использующих класс AuthenticationIdentityManager, который используется сгенерированным классом AccountController? Я не мог найти способ получить доступ к списку пользователей с моего контроллера.

(Кстати, новое название «Идентичность» может показаться удивительным для некоторых людей, но это боль для поиска.)

Edit: Если я пытаюсь сделать это

ApplicationDbContext UsersContext = new ApplicationDbContext(); 
UsersContext.Users.ToList(); // Exception 

Я получаю исключение Invalid column name 'Discriminator'. Определение ApplicationDbContext генерируется автоматически с помощью мастера нового приложения:

using Microsoft.AspNet.Identity.EntityFramework; 

namespace Cobranzas.Models 
{ 
    public class ApplicationUser : User 
    { 

    } 
    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser> 
    { 

    } 
} 

Так что я думаю, что Discriminator колонка только рассказываем друг от друга ApplicationUser от User. Тем не менее, он не существует в моей базе данных (которая была создана автоматически приложением.)

+1

Вы смотрели на примере приложения? https://github.com/rustd/AspnetIdentitySample/tree/master/AspnetIdentitySample – sam

+2

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

ответ

26

Я узнал, что я не использовал производный объект ApplicationUser для чего-либо, поэтому я просто пошел и изменил все его использование для простых старых User. Тогда я просто изменил ApplicationDbContext определение для следующего:

public class ApplicationDbContext : IdentityDbContext< 
    User, UserClaim, UserSecret, UserLogin, 
    Role, UserRole, Token, UserManagement> 
{ 
} 

И теперь я могу получить доступ к списку пользователей:

UsersContext = new ApplicationDbContext(); 
... 
UsersContext.Users.ToList(); 

Однако, я думаю, что это будет возвращаться и преследовать меня в будущем (я будете, вероятно, необходимо добавить дополнительные поля User), поэтому я, возможно, придется использовать тот же подход, что и в этом вопросе:

Get all role names in ASP.NET MVC5 Identity system

Редактировать: Поскольку мне нужно добавить новое свойство, мне пришлось отменить изменения. Так что я пошел вперед и сделал линию по сравнению с линией Sample Project ASP.NET идентичности, и выяснил, что созданный проект имел следующую строку:

IdentityManager = new AuthenticationIdentityManager(new IdentityStore()); 

в то время как образец приложение было включен в контексте базы данных в конструктор. Поэтому я добавил его в свой конструктор, воссоздал базу данных, и проблема исчезла.

IdentityManager = new AuthenticationIdentityManager(new IdentityStore(new ApplicationDbContext())); 
+0

Это меня тоже. Я вообще не понимаю, почему этот шаблон VS2013 RTM настроен таким образом. Может ли быть причина или это надзор? – joelmdev

+0

И ждите, чтобы узнать, что происходит, когда вы обновляете версии RTM с помощью 1.0. Все изменилось; к счастью, образец приложения также был изменен, чтобы отразить это. –

+0

Вы имеете в виду RC к RTM? вы ссылаетесь на это примерное приложение? https://github.com/rustd/AspnetIdentitySample – joelmdev

4

Для RTM, вам придется опуститься до вашего DbContext или независимо от конкретной реализации магазин должен перечислить всех пользователей. В следующем выпуске мы, скорее всего, добавим необязательный метод «Пользователи/Роли» в классах Менеджера, которые могут быть реализованы, чтобы выставить IQueryables для пользователей и магазинов.

+0

Спасибо. Прямо сейчас я использую 'IEnumerable roleForUser = ожидание IdentityManager.Store.Roles.GetRolesForUserAsync (user.Id, CancellationToken.None);' который запахи смешно для моего неподготовленного носа. –

+0

Будет полезно иметь методы для удаления (удаления) в дополнение к методам IQueryable Users/Roles, которые вы упомянули. В настоящее время отсутствует пользовательский метод UserManger. – subsci

+5

Они доступны в версии 2.0-alpha1. –

13
  1. Создать ASP .NET MVC5 проект по умолчанию
  2. Создание ASP .NET Identity таблиц правильно и изменить строку подключения а.
  3. Чтобы пользователи просто сделать следующий тест A. Перейти к AccountController B. Создание любого фиктивный метод и поставить там
var context = new ApplicationDbContext(); 

var allUsers = context.Users.ToList(); 

enter image description here

+0

Спасибо. Пожалуйста, подумайте, что этот вопрос устарел. [Этот комментарий] (http://stackoverflow.com/questions/18773838/how-to-obtain-a-list-of-users-from-asp-net-identity/20954972?noredirect=1#comment31171316_18833772) может быть из интерес. –

0
using System.Linq; 
using System.Data; 
using System.Data.Entity; 

     var db = new ApplicationDbContext(); 
     var Users = db.Users.Include(u => u.Roles); 
Смежные вопросы