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

Posted

技术标签:

【中文标题】IdentityUserRole 表列重复且无法删除主键【英文标题】:IdentityUserRole Table column duplicated and can't drop primary key 【发布时间】:2018-09-12 11:36:39 【问题描述】:

我的 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 具有相似的值

使用我的用户管理器

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

它只删除 IdentityRole_IdIdentityUser_UserName 实体。我想不出删除RoleIdUserId 的方法

【问题讨论】:

【参考方案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 );

【讨论】:

以上是关于IdentityUserRole 表列重复且无法删除主键的主要内容,如果未能解决你的问题,请参考以下文章

用javascript隐藏多个表列[重复]

如何不重复基于 JOIN 查询的表列?

如何将表列从十进制更改为 varchar [重复]

Jquery移动表列切换不起作用[重复]

SQL将值从一个表列更新到另一个[重复]

3. 无重复字符的最长子串 141. 环形链表 171. Excel表列序号 203. 移除链表元素