删除年级

同样,删除年级时需要考虑年级中是否存在班级。

添加GetWithClasses方法

在GradeRepo中添加GetWithClasses方法,代码如下:

public Grade? GetWithClasses(Guid id)
{
    return DbSet.Include(g => g.Classes).SingleOrDefault(g => g.Id == id);
}

添加Delete方法

在GradeService中添加Delete方法,代码如下:

public void Delete(Guid id)
{
    Grade? grade = gradeRepo.GetWithClasses(id);
    if (grade == null)
    {
        throw new NullReferenceException("未找到该年级,无法删除");
    }
    if (grade.Classes.Any())
    {
        throw new InvalidOperationException("年级中存在班级,无法删除");
    }
    gradeRepo.Delete(grade);
}

添加Delete动作

在GradeController中添加Delete动作,代码如下:

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

完善视图

添加删除按钮和Delete函数,代码如下:

<button class="button is-danger" onclick="Delete('@grade.Id')">删除</button>
@section Scripts {
    <script>
        function Delete(id) {
            DeleteWithController(id, 'Grade');
        }
    </script>
}