戳戳猫的小窝
更新日志
关于
对于班级的删除,不能像删除学生一样找到数据就直接删除,而是需要判断此班级中是否存在学生,如果存在学生,则不允许删除班级。 # 添加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](https://image.nyazira.top/Article/image-20240818211500645.png)
删除班级