Search code examples
c#asp.netentity-framework-6asp.net-identityuser-roles

IdentityUserRole Table column duplicated and can't drop primary key


I have a issue with my UserRole table I renamed my tables by the following definition

protected override void OnModelCreating(DbModelBuilder builder)
 {
    builder.Conventions.Remove<PluralizingTableNameConvention>();

    builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
    builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
    builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
    builder.Entity<User>().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName});
    builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
    builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });
 }

I have not defined a custom UserRole class so in this case am just using IdentityUserRole. However, when I look at my UserRole table there is RoleIdand IdentityRole_Id with similar values

enter image description here

Using my UserManager

 IdentityResult result = await this.UserManager.RemoveFromRoleAsync(regUser.Id, role.Name);

It only removes the IdentityRole_Id and IdentityUser_UserName entities. I can't figure out a way to remove the RoleId and UserId


Solution

  • You should call base.OnModelCreating(builder); before your code which will setup relations for AspNetIdentity

    protected override void OnModelCreating(DbModelBuilder builder)
    {
        // Add this line
        base.OnModelCreating(builder);
    
        builder.Conventions.Remove<PluralizingTableNameConvention>();
    
        builder.Entity<IdentityUserClaim>().ToTable("UserClaim").HasKey<Int32>(r => r.Id);
        builder.Entity<IdentityUserLogin>().ToTable("UserLogin").HasKey<string>(l => l.UserId);
        builder.Entity<IdentityRole>().ToTable("Role").HasKey<string>(r => r.Id);
        builder.Entity<User>().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName});
        builder.Entity<IdentityUser>().ToTable("User").HasKey<string>(r => r.UserName);
        builder.Entity<IdentityUserRole>().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });
    }