Как добавить больше пользовательских данных в ASP.NET MVC user.Identity - PullRequest
0 голосов
/ 02 ноября 2019

Как я могу расширить или добавить дополнительные методы к идентификатору пользователя?

Когда пользователь зарегистрирован, в заголовке nav имя пользователя указывается как электронная почта пользователя. Как я могу настроить личность пользователя, чтобы добавить больше данных, например. User.Identity.GetFullname(). Я использую ASP.NET MVC.

1 Ответ

1 голос
/ 03 ноября 2019

Если вы просто хотите добавить больше полей в свой IdentityUser, то вы можете просто расширить его с помощью класса.

Например, создать новый класс:

public class ApplicationUser : IdentityUser{

   public string FullName { get; set;}

}

Когда вы примените миграции к своей базе данных, вы увидите, что будет дополнительный столбец, который FullName .

Вы не должны воссоздатьсвойства, которые уже хранятся в вашей существующей таблице AspNetUsers (например: Id, Email, имя пользователя и т. д.). Потому что это не восстановит всю вашу таблицу, а просто добавит новые столбцы в таблицу AspNetUsers.

Но есть другой подход, и эта часть, я думаю, важна.

Предположим, что у вас есть Product.cs:

public class Product {
   public int Id { get; set;}
   public string ProductNo { get; set; } 
   public string ProductName { get; set;}
}

ивы уже используете DbContext для применения ваших миграций в отношении вашей модели продукта.

Возможно DbContext.cs будет:

public class DataContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
       optionsBuilder.UseSqlServer(@"Server=YourServer; Database=DbName; integrated security=true;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
         //This can be used.  
    }

    public DbSet<Product> Products { get; set; }
}

И в целом вашDataContext для вашего ApplicationUser будет выглядеть так:

public class ApplicationIdentityDbContext : IdentityDbContext<ApplicationUser>
{
   public ApplicationIdentityDbContext(DbContextOptions<ApplicationIdentityDbContext> options) : base(options){}
}

Это какреализовать способ создания контекстов данных. Но когда вы хотите определить отношение с этими двумя таблицами (Products и AspNetUsers), это может быть отношение, в котором все пользователей имеют свои собственные Product, тогда высока вероятность того, что вы получитеошибка или вы не сможете контролировать 2 разных DataContexts.

Итак, для избежания такого рода борьбы лучше использовать только 1 Data Context, и он должен выглядеть следующим образом:

public class DataContext: IdentityDbContext<ApplicationUser>
    {
        public DataContext(DbContextOptions<DataContext> options)
            : base(options)
        {

        }

        public DbSet<Product> Products { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            base.OnModelCreating(modelBuilder);
        }
}

Теперь вы можете просто определить ForeignKeys между вашими ApplicationUser и Product.

Например:

public class ApplicationUser: IdentityUser{
    public string FullName { get; set; }

    public int? ProductId { get; set; }
    public Product Product { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...