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 表时,RoleId
和 IdentityRole_Id
具有相似的值
使用我的用户管理器
IdentityResult result = await this.UserManager.RemoveFromRoleAsync(regUser.Id, role.Name);
它只删除 IdentityRole_Id
和 IdentityUser_UserName
实体。我想不出删除RoleId
和UserId
的方法
【问题讨论】:
【参考方案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 表列重复且无法删除主键的主要内容,如果未能解决你的问题,请参考以下文章