簡體   English   中英

如何向 ASP.NET MVC user.Identity 添加更多用戶數據

[英]How to add more user data to ASP.NET MVC user.Identity

如何為用戶身份擴展或添加更多方法?

注冊用戶時,在 header 導航中,用戶名指定為用戶 email。 如何自定義用戶身份以添加更多數據,例如。 User.Identity.GetFullname() 我正在使用 ASP.NET MVC。

如果您只想為您的 IdentityUser 添加更多字段,那么您可以在 class 的幫助下簡單地擴展它。

例如,新建一個 class:

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來應用有關產品 Model 的遷移。

可能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; }
}

通常,您的ApplicationUserDataContext將是這樣的:

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

這是創建數據上下文的簡單方法。 但是,當您想定義與這 2 個表(Products 和 AspNetUsers)的關系時,它可能是所有用戶都有自己的Product的關系,那么您很可能會收到錯誤,或者您將無法控制 2 個不同的 DataContext。

因此,為了避免這些問題,僅使用1 個數據上下文將是一個更好的解決方案,它應該如下所示:

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);
        }
}

現在您可以在ApplicationUserProduct之間簡單地定義ForeignKeys

例如:

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

    public int? ProductId { get; set; }
    public Product Product { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM