Вопрос

Я пытаюсь создать аутентификацию с использованием новой Identity и MVC5, но я хотел бы «присоединиться» к отдельной пользовательской таблице для регистрации и управления страницами. Я читал много о расширении таблицы AspNetUser, но я отчаянно пытаюсь найти, как присоединиться к отдельной таблице. Я не хочу просто добавлять поля в таблицу AspNetUser, поскольку этот проект будет шаблоном для других приложений веб-сайта, и каждый проект имеет разные требования к пользовательским таблицам, поэтому я считаю, что он будет более упорядоченным, если я смогу адаптировать отдельную таблицу вместо постоянного изменения таблицы AspNetUser.

Любые примеры кода были бы очень благодарны, поскольку я лучше изучил пример, чем объяснение!

Alex

Принятый ответ

Поскольку ASP.NET Identity использует EF Code First, вы можете сохранить свой профиль как отдельную таблицу, добавив новый класс Code First и добавив его в DbContext. Следующая публикация показывает, как вы можете это сделать http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013 -templates.aspx


Популярные ответы

@Alex это то, что есть, и это работает для меня

Это создает пользовательский класс, который наследуется от IdentityUser, как и ApplicationUser. Он также определяет виртуальный класс, который является ассоциированным классом профиля, который связывается, когда пользователь создается в базе данных. Это можно сделать здесь как пользовательское решение, чтобы оно использовало существующие таблицы, вы просто заменяете объекты здесь объектом объекта из базы данных и используете строку соединения, которая указывает на правильную базу данных.

  public class CustomUser : IdentityUser
  {
      public virtual CustomUserProfile CustomUserProfile { get; set; }
  }
  public class CustomUserProfile
  {

    [Key]
    public Guid Id
    {
        get { return Guid.NewGuid(); }
        private set { value = Id; }
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
   //add more items

}
public class ApplicationDbContext : IdentityDbContext<CustomUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
    public System.Data.Entity.DbSet<CustomUserProfile> CustomUserProfile { get; set; }
}

Теперь в контроллере у меня есть:

 public AccountController()
        : this(new UserManager<CustomUser>(new UserStore<CustomUser>(new ApplicationDbContext())))
    {
    }

    public AccountController(UserManager<CustomUser> userManager)
    {
        UserManager = userManager;
    }

    public UserManager<CustomUser> UserManager { get; private set; }

Это создаст новый объект UserManager, используя пользовательский пользователь, который наследует от IdentityUser так же, как и ApplicationUser Does.

И метод добавления нового пользователя:

      var user = new CustomUser() { UserName = model.UserName };
                user.CustomUserProfile = new CitadelUserProfile();
                user.CustomUserProfile.FirstName = model.FirstName;


                var result = UserManager.Create(user, model.Password);

Если у вас все еще возникают проблемы с миграцией, вы можете удалить файл MDF и повторно запустить приложение, и оно будет воссоздавать базу данных.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему