【发布时间】:2020-12-22 08:31:16
【问题描述】:
我正在尝试从 IdentityUserRole 表中名为 UserRole 的列中删除索引/外键。
UserRole 有 2 列。用户 ID 和角色 ID。两者都是主键。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var rolesTable = modelBuilder.Entity<Role>().ToTable("Role");
var userRolesTable = modelBuilder.Entity<UserRole>().ToTable("UserRole");
var userClaimsTable = modelBuilder.Entity<IdentityUserClaim<string>>().ToTable("UserClaim");
var usersTable = modelBuilder.Entity<User>().ToTable("User");
modelBuilder.Entity<Role>(builder =>
{
builder.Metadata.RemoveIndex(new[] { builder.Property(u => u.NormalizedName).Metadata });
});
modelBuilder.Entity<UserRole>(builder =>
{
builder.Metadata.RemoveIndex(new[] { builder.Property(u => u.RoleId).Metadata});
});
}
但是,每当我运行迁移并更新数据库时,仍会出现此索引:
列 RoleId 的 IX_UserRole_RoleId
编辑:这是生成的迁移
migrationBuilder.CreateTable(
name: "UserRole",
columns: table => new
{
UserId = table.Column<string>(nullable: false),
RoleId = table.Column<string>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserRole", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_UserRole_Role_RoleId",
column: x => x.RoleId,
principalTable: "Role",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserRole_User_UserId",
column: x => x.UserId,
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_UserRole_RoleId",
table: "UserRole",
column: "RoleId");
【问题讨论】:
-
迁移是否会给您带来任何错误(是否存在包含阻止其正常运行的数据的外键链接?)。我的建议是备份数据库,然后为迁移生成 SQL,然后手动运行。您通常会从 DBMS 获得更多信息
-
从我的包管理器控制台运行时没有错误。
-
这是一个我正在执行迁移的新数据库。
-
您能否发布由此更改生成的迁移?
-
嗨@PaulMichaels,我已经用它编辑了我的问题。
标签: c# entity-framework asp.net-core .net-core entity-framework-core