Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

.NET कोर 2.1 पहचान सभी उपयोगकर्ताओं को उनकी संबंधित भूमिकाओं के साथ मिलती है

मैंने अब निम्नलिखित समाधान लागू किया है।

जैसा कि CodeNotFound ने टिप्पणियों में बताया, IdentityUser के पास Roles हुआ करता था संपत्ति। .NET कोर में अब ऐसा नहीं है। यह टिप्पणी/मुद्दा गिटहब पर नेट कोर के लिए वर्तमान समाधान प्रतीत होता है। मैंने इसे निम्नलिखित कोड के साथ कार्यान्वित करने का प्रयास किया है:

एप्लिकेशन उपयोगकर्ता

public class ApplicationUser : IdentityUser
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

एप्लिकेशन उपयोगकर्ता भूमिका

public class ApplicationUserRole : IdentityUserRole<string>
{
    public virtual ApplicationUser User { get; set; }
    public virtual ApplicationRole Role { get; set; }
}

आवेदन भूमिका

public class ApplicationRole : IdentityRole
{
    public ICollection<ApplicationUserRole> UserRoles { get; set; }
}

डीबीकॉन्टेक्स्ट

public class ApplicationDbContext
    : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>,
    ApplicationUserRole, IdentityUserLogin<string>,
    IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<ApplicationUserRole>(userRole =>
        {
            userRole.HasKey(ur => new { ur.UserId, ur.RoleId });

            userRole.HasOne(ur => ur.Role)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();

            userRole.HasOne(ur => ur.User)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });
    }
}

स्टार्टअप

services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

अंत में, सुनिश्चित करें कि जब आप इसका उपयोग कर रहे हैं कि आप उत्सुकता से उपयोगकर्ता के UserRoles, और फिर UserRole की भूमिका को इस तरह लोड करते हैं:

this.Users = userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToList();

मुझे एक समस्या थी जहां Role प्रत्येक UserRole . की संपत्ति शून्य था और इसे .ThenInclude(ur => ur.Role) भाग।

बहु-स्तरीय उत्सुक लोडिंग पर Microsoft दस्तावेज़:https://docs.microsoft.com/en-us/ef/core/querying/संबंधित-डेटा#जिसमें-एकाधिक-स्तर

एएसपी कोर 2.2 अपडेट

IdentityUserRole<Guid> . से अंतर्निहित स्ट्रिंग नहीं माइग्रेशन काम करने के लिए आपको मॉडलबिल्डर में कोड को हटाने की भी आवश्यकता हो सकती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql 1050 त्रुटि तालिका पहले से मौजूद है जब वास्तव में, यह नहीं है

  2. रखरखाव कार्यों को स्वचालित करने के लिए डेटाबेस बैकअप सलाहकारों का उपयोग करना

  3. SQL चयन सिंटैक्स - DBMS द्वारा सूचीबद्ध

  4. NaviCat MySQL क्लाइंट का उपयोग करके डेटाबेस से कैसे कनेक्ट करें

  5. MySQL कमांड:सामान्य MySQL प्रश्नों की चीट शीट