Доброго времени суток.
Использую .net core 6, ef core для ms sqlserver.
Переопределенный метод OnModelCreating:
spoiler
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.HasDefaultSchema("Identity");
builder.Entity<ApplicationUser>(entity =>
{
entity.ToTable("Users");
entity.HasMany(x => x.Roles).WithMany(x => x.Users);
});
builder.Entity<ApplicationRole>(entity =>
{
entity.ToTable("Roles");
});
builder.Entity<ApplicationRoleClaim>(entity =>
{
entity.ToTable("RoleClaims");
entity.HasOne(x => x.Role).WithMany(x => x.RoleClaims).HasForeignKey(x => x.RoleId).OnDelete(DeleteBehavior.Cascade);
});
builder.Entity<IdentityUserRole<string>>().ToTable("UserRoles");
builder.Entity<IdentityUserClaim<string>>().ToTable("UserClaims");
builder.Entity<IdentityUserLogin<string>>().ToTable("UserLogins");
builder.Entity<IdentityUserToken<string>>().ToTable("UserTokens");
}
DbContext объявлен как:
IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserClaim<string>, IdentityUserRole<string>, IdentityUserLogin<string>, ApplicationRoleClaim, IdentityUserToken<string>>
Суть вопроса: при создании первой миграции откуда-то появляется дополнительная таблица под именем "ApplicationRoleApplicationUser"
Код создания таблицы:
spoiler
migrationBuilder.CreateTable(
name: "ApplicationRoleApplicationUser",
schema: "Identity",
columns: table => new
{
RolesId = table.Column<string>(type: "nvarchar(450)", nullable: false),
UsersId = table.Column<string>(type: "nvarchar(450)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ApplicationRoleApplicationUser", x => new { x.RolesId, x.UsersId });
table.ForeignKey(
name: "FK_ApplicationRoleApplicationUser_Roles_RolesId",
column: x => x.RolesId,
principalSchema: "Identity",
principalTable: "Roles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ApplicationRoleApplicationUser_Users_UsersId",
column: x => x.UsersId,
principalSchema: "Identity",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
Код создания таблицы UserRoles:
spoiler
migrationBuilder.CreateTable(
name: "UserRoles",
schema: "Identity",
columns: table => new
{
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
RoleId = table.Column<string>(type: "nvarchar(450)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserRoles", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_UserRoles_Roles_RoleId",
column: x => x.RoleId,
principalSchema: "Identity",
principalTable: "Roles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserRoles_Users_UserId",
column: x => x.UserId,
principalSchema: "Identity",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
Понимаю, что, скорее всего, новая таблица создается из-за того, что в стандартном IdentityUser нет коллекции с ролями пользователя, а я ее добавил, но он не понимает, что уже существует таблица с ролями. Как его заставить писать роли пользователей в родную таблицу?