删除班级

对于班级的删除,不能像删除学生一样找到数据就直接删除,而是需要判断此班级中是否存在学生,如果存在学生,则不允许删除班级。

添加GetWithStudents方法

在ClassRepo中添加GetWithStudents方法,代码如下:

public Class? GetWithStudents(Guid id)
{
    return DbSet.Include(c => c.Students).SingleOrDefault(c => c.Id == id);
}

通过此方法,可以加载导航中的Students数据,从而判断是否存在学生。

添加Delete方法

在ClassService中添加Delete方法。

首先判断是否能找到要被删除的数据,如果找不到,就抛出空引用异常。

然后判断班级中是否含有学生,如果有,就抛出非法操作异常。

否则,就删除该数据。

代码如下:

public void Delete(Guid id)
{
    Class? @class = classRepo.GetWithStudents(id);
    if (@class == null)
    {
        throw new NullReferenceException("未找到该班级,无法删除");
    }
    if (@class.Students.Any())
    {
        throw new InvalidOperationException("班级中存在学生,无法删除");
    }
    classRepo.Delete(@class);
}

创建Delete动作

在ClassController创建Delete动作,代码如下:

public IActionResult Delete(Guid id)
{
    try
    {
        classService.Delete(id);
        return Ok("删除成功");
    }
    catch (Exception ex)
    {
        return BadRequest(ex.Message);
    }
}

完善视图

首先添加删除按钮,代码如下:

<button class="button is-danger" onclick="Delete('@clazz.Id')">删除</button>

然后添加Delete函数,代码如下:

@section Scripts {
    <script>
        function Delete(id) {
            DeleteWithController(id, 'Class');
        }
    </script>
}

删除存在学生的班级

此时,如果删除存在学生的班级,则会显示删除失败

image-20240818211500645