IdentityUserRole表列重复且无法删除主键

时间:2018-04-03 07:59:43

标签: c# asp.net entity-framework-6 asp.net-identity user-roles

我的UserRole表存在问题我通过以下定义重命名了我的表

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

我还没有定义自定义UserRole类,所以在这种情况下我只使用IdentityUserRole。但是,当我查看我的UserRole表时,RoleIdIdentityRole_Id具有相似的值

enter image description here

使用我的UserManager

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

它仅删除IdentityRole_IdIdentityUser_UserName个实体。我无法找到删除RoleIdUserId

的方法

1 个答案:

答案 0 :(得分:1)

您应该在代码之前调用base.OnModelCreating(builder);,这将为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 });
}