मैंने अब निम्नलिखित समाधान लागू किया है।
जैसा कि 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>
. से अंतर्निहित स्ट्रिंग नहीं माइग्रेशन काम करने के लिए आपको मॉडलबिल्डर में कोड को हटाने की भी आवश्यकता हो सकती है।