我尝试更改 ASP.NET MVC 身份用户的表名称(因为我正在使用现有数据库),此代码已添加到 Identitymodel.cs 中:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("Web_Users").HasKey(x => x.Id);
modelBuilder.Entity<ApplicationUser>().ToTable("Web_Users").HasKey(x => x.Id);
modelBuilder.Entity<IdentityUserRole>().ToTable("Web_UserRoles").HasKey(x => x.RoleId);
modelBuilder.Entity<IdentityUserLogin>().ToTable("Web_UserLogins").HasKey(x => x.UserId);
modelBuilder.Entity<IdentityUserClaim>().ToTable("Web_UserClaims").HasKey(x => x.Id);
modelBuilder.Entity<IdentityRole>().ToTable("Web_Roles").HasKey(x => x.Id);;
}
但是,在测试用户注册时,我收到了这个奇怪的错误:
在模型生成过程中检测到一个或多个验证错误:IdentityRole_Users_Target::多重性在关系“IdentityRole_Users”中的角色“IdentityRole_Users_Target”中无效。由于 Dependent Role 引用了关键属性,因此 Dependent Role 的重数上限必须为“1”。
这里发生了什么,我能做些什么来解决这个问题?我尝试从 Google 和 Stack Overflow 搜索,但找不到答案。
如果您想要相同的列,只需执行此操作,请参考解决方案
modelBuilder.Entity<ApplicationUser>().ToTable("Web_Users");
modelBuilder.Entity<IdentityRole>().ToTable("Web_Roles");
modelBuilder.Entity<IdentityUserRole>().ToTable("Web_UserRoles");
modelBuilder.Entity<IdentityUserClaim>().ToTable("Web_UserClaims");
modelBuilder.Entity<IdentityUserLogin>().ToTable("Web_UserLogins");
或者如果您想更改特定列
modelBuilder.Entity<ApplicationUser>().ToTable("Web_Users").Property(p => p.Id).HasColumnName("User_Id");
问候
我只能猜测 IdentityUserRole 有两个字段 UserId 和 RoleId。由于一个用户可以有多个角色,RoleId可以重复多次,因此可以作为主键。您只能创建复合键
modelBuilder.Entity<IdentityUserRole>().ToTable("Web_UserRoles").HasKey(x =>
new{x.UserId, x.RoleId});
或者您可以将主键列 ID 添加到此表
modelBuilder.Entity<IdentityUserRole>().ToTable("Web_UserRoles").HasKey(x => x.Id);