级联
查看 AspNetUserRoles 表的视图设计器,可以发现 User 和 Role 互为外键关联:
禁止级联删除
下面通过修改 AppDbContext 禁止级联删除:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
foreignKey.DeleteBehavior = DeleteBehavior.Restrict;
}
modelBuilder.Seed();
}
然后 Add-Migration + Update-Database。
再打开表的视图设计器,可以看到删除时“无操作”。
如此操作后,只要角色里面还有用户就不能直接删除角色,只有先清除其中所有用户后才能删除角色。
本节遗留的问题是虽然没有级联删除,但程序报错了,下一节讲解如何优化自定义 Error 视图。