级联

image.png

查看 AspNetUserRoles 表的视图设计器,可以发现 User 和 Role 互为外键关联:
image.png

默认情况下,删除角色时会级联删除掉对应的用户。

禁止级联删除

下面通过修改 AppDbContext 禁止级联删除:

  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. base.OnModelCreating(modelBuilder);
  4. foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
  5. {
  6. foreignKey.DeleteBehavior = DeleteBehavior.Restrict;
  7. }
  8. modelBuilder.Seed();
  9. }

image.png

然后 Add-Migration + Update-Database。

再打开表的视图设计器,可以看到删除时“无操作”。
image.png

如此操作后,只要角色里面还有用户就不能直接删除角色,只有先清除其中所有用户后才能删除角色。

本节遗留的问题是虽然没有级联删除,但程序报错了,下一节讲解如何优化自定义 Error 视图。
image.png