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

ईएफ कोर 2.0 पहचान - नेविगेशन गुण जोड़ना

मुझे नहीं पता क्यों, ये उपयोगी नेविगेशन गुण नहीं हैं। मैं उपयोगकर्ताओं को उनकी भूमिकाओं के साथ सूचीबद्ध करना चाहता हूं।

तो मैंने निम्नलिखित किया:

public class ApplicationUser : IdentityUser
{
    public virtual ICollection<ApplicationUserRole> UserRoles { get; } = new List<ApplicationUserRole>();
}

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

public class ApplicationRole : IdentityRole<string>
{
    public ApplicationRole(){ }

    public ApplicationRole(string roleName)
        : base(roleName)
    {
    }

    public virtual ICollection<ApplicationUserRole> UserRoles { get; } = new List<ApplicationUserRole>();
}

यह नेविगेशन बनाता है, लेकिन यह RoleId1 . जैसे अतिरिक्त कॉलम बनाता है और Discriminator . इसलिए, मैंने निम्नलिखित को आइडेंटिटीयूजर पोको नेविगेशन प्रॉपर्टीज जोड़ें .

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

    builder.Entity<ApplicationUser>()
        .HasMany(e => e.UserRoles)
        .WithOne()
        .HasForeignKey(e => e.UserId)
        .IsRequired()
        .OnDelete(DeleteBehavior.Cascade);

    builder.Entity<ApplicationUserRole>()
        .HasOne(e => e.User)
        .WithMany(e => e.UserRoles)
        .HasForeignKey(e => e.UserId);

    builder.Entity<ApplicationUserRole>()
        .HasOne(e => e.Role)
        .WithMany(e => e.UserRoles)
        .HasForeignKey(e => e.RoleId);
}

लेकिन मेरे पास अभी भी दोनों कॉलम हैं RoleId1 और Discriminator . उसके बाद, मैं ApplicationDbContext, DI कॉन्फ़िगरेशन सेवा और DB बीज में नए ApplicationRole वर्ग के साथ प्रतिस्थापित करता हूं।

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>
    , ApplicationUserRole, IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    ...
}

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
   ...
}

public DbInitializer(
        ApplicationDbContext context,
        UserManager<ApplicationUser> userManager,
        RoleManager<ApplicationRole> roleManager)
    {
        _context = context;
        _userManager = userManager;
        _roleManager = roleManager;
    }

public async void Initialize()
    {
        _context.Database.EnsureCreated();

        if (!_context.Roles.Any(r => r.Name == SharedConstants.Role.ADMINISTRATOR))
            await _roleManager.CreateAsync(new ApplicationRole(SharedConstants.Role.ADMINISTRATOR));
    }            

इसके अलावा, मैं नेविगेट कर सकता था और भूमिका का पहला नाम प्राप्त कर सकता था।

ctx.Users.Select(e => new
            {
                e.Id,
                e.UserName,
                e.Email,
                e.PhoneNumber,
                Roles = e.UserRoles.Select(i => i.Role.Name).ToList()
            }).ToList();

मुझे उम्मीद है कि इससे आपको Claims के बारे में जानकारी मिल जाएगी नेविगेशन संपत्ति।



  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 का उपयोग करके अन्य स्थानों के लिए दोहराएं?

  2. MySQL:=सच बनाम बूलियन पर सच है। कब किसका उपयोग करना उचित है? और कौन सा विक्रेता स्वतंत्र है?

  3. ए.* लारवेल क्वेरी बिल्डर पर बाएं शामिल होने के साथ ग्रुप बाय में नहीं है

  4. MySQL वन-टू-मैनी टू JSON फॉर्मेट

  5. Laravel वाक्पटु क्वेरी JSON कॉलम कहाँ में है?