Недопустимое имя объекта AspNetRoles .NET Core 5

#asp.net-core #entity-framework-core #asp.net-identity #asp.net-core-5.0

Вопрос:

Я получаю недопустимое имя объекта исключения «AspNetRoles». когда я пытаюсь ввести значения при запуске приложения. Я полагаю, что это связано с тем, что я создал пользовательскую конфигурацию, которая переименовала таблицы идентификаторов, используя этот подход: я должен отметить, что я использовал подход code first.

 public static void AddCustomIdentityConfiguration(this ModelBuilder builder)  {  builder.Entity<ApplicationUser>().ToTable("users"); //AspNetUsers  builder.Entity<IdentityRole>().ToTable("roles"); //AspNetRoles  builder.Entity<IdentityUserRole<string>>().ToTable("user_roles"); //AspNetUserRole  builder.Entity<IdentityUserClaim<string>>().ToTable("user_claims"); //AspNetUserClaim  builder.Entity<IdentityUserLogin<string>>().ToTable("user_login"); //AspNetUserLogin  builder.Entity<IdentityRoleClaim<string>>().ToTable("role_claim"); //AspNetRoleClaim  builder.Entity<IdentityUserToken<string>>().ToTable("user_token"); //AspNetUserToken  }  

Я создал простой статический метод, который должен выполнять посев

 public static async Task SeedDBDefaultRolesAsync(RoleManager<IdentityRole> roleManager)  {   if (!roleManager.Roles.Any())  {  var roles = new List<RoleDTO>()  {  new RoleDTO() { Name = "Admin", NormalizedName = "ADMIN"},  new RoleDTO() { Name = "User", NormalizedName = "USER"},  };   foreach (var role in roles)  {  await roleManager.CreateAsync(role);  }  }  }  

Итак, мой вопрос заключается в следующем: как я могу получить доступ к таблице ролей вместо таблицы AspNetRoles?

ОБНОВЛЕНИЕ: Конфигурация AddCustomIdentityConfiguration запускается при переносе дополнений. Он был создан с первоначальной миграцией

Пример миграции..

 ....migrationBuilder.CreateTable(  name: "users",  columns: table => new  {  Id = table.Column<string>(type: "nvarchar(450)", nullable: false),  UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),  NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),  Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),  NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),  EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),  PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: true),  SecurityStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),  ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),  PhoneNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),  PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false),  TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false),  LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),  LockoutEnabled = table.Column<bool>(type: "bit", nullable: false),  AccessFailedCount = table.Column<int>(type: "int", nullable: false)  },  constraints: table =>  {  table.PrimaryKey("PK_users", x => x.Id);  });  

Комментарии:

1. Где называется этот AddCustomIdentityConfiguration метод? При правильном вызове вам больше ничего не нужно делать, чтобы получить доступ к «переименованной» таблице.

2. @IvanStoev Я обновил вопрос. В основном это было вызвано первоначальной миграцией

3. Я имею в виду, где этот метод вызывается в вашем коде . т. е. изнутри OnModelCreating , до или после базового вызова (в случае, если вы наследуете один из базовых универсальных IdentityDbContext )

4. Это называется внутри OnModelCreating protected override void OnModelCreating(ModelBuilder builder) { builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); base.OnModelCreating(builder); builder.AddCustomIdentityConfiguration(); }

5. Хм, тогда это должно сработать. За исключением случаев RoleManager , когда класс, который вы передаете, не использует контекст вашей бд (с вышеупомянутым OnModelCreating переопределением).