ASP.NET MVC 创建用户:多重性无效

问题描述 投票:0回答:2

我尝试更改 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 搜索,但找不到答案。

c# asp.net asp.net-mvc entity-framework asp.net-identity
2个回答
1
投票

如果您想要相同的列,只需执行此操作,请参考解决方案

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

问候


0
投票

我只能猜测 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);

© www.soinside.com 2019 - 2024. All rights reserved.