删除专业

删除专业和删除年级类似。

添加GetWithClasses方法

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

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

添加Delete方法

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

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

添加Delete动作

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

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

完善视图

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

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