c# - 在 ASP.NET Core 中删除对象时的异常处理
问题描述
基本上,我通过引入Employee Repository来处理所有数据库交互来解耦我的代码。我的问题是我的代码执行指令但随后抛出
System.InvalidOperationException:“序列不包含任何元素”。
我已经尝试使用FirstOrDefault
andSingelOrDefault
按照建议但我读过以前的帖子,但它执行删除操作并抛出
System.NullReferenceException:“对象引用未设置为对象的实例。”
removeEmployee
为空。有人可以帮我解释一下如何解决它
这是我正在尝试重构的代码,并且此初始代码可以正常工作而不会引发异常:
[HttpPost]
public IActionResult Remove(int[] employeeIds)
{
foreach (int employeeId in employeeIds)
{
Employee removeEmployee = context.Employees.Single(c => c.EmployeeID == employeeId);
if (removeEmployee.WorkStatus == "Available")
{
context.Employee.Remove(removeEmployee);
}
else
{
return Redirect("/Employee/Remove");
}
}
context.SaveChanges();
return Redirect("/");
}
以下是我尝试重构代码的方式。
员工资料库:
public bool RemoveEmployee(int[] employeeIds)
{
foreach (int employeeId in employeeIds)
{
Employee removeEmployee = context.Employees.Single(c => c.EmployeeID == employeeId);
if (removeEmployee.WorkStatus == "Available")
{
context.Employees.Remove(removeEmployee);
}
else
{
return false;
}
}
context.SaveChanges();
return true;
}
员工控制器:
private IEmployeesRepository repo;
public EmployeeController(IEmployeesRepository repo)
{
this.repo = repo;
}
[HttpPost]
public IActionResult Remove(int[] employeeIds)
{
repo.RemoveEmployee(employeeIds);
if (repo.RemoveEmployee(employeeIds) == false)
{
return Redirect("/Employee/Remove");
}
else
{
return Redirect("/");
}
}
解决方案
感谢所有费心查看我的问题并试图帮助我找到解决方案的人。我的代码的问题实际上与我的“RemoveEmployee”方法中的逻辑和返回的布尔值有关。以下是我想出的解决方案。
员工资料库:
public bool RemoveEmployee(int[] employeeIds)
{
foreach (int employeeId in employeeIds)
{
Employee removeEmployee = context.Employees.Single(c => c.EmployeeID == employeeId);
if (removeEmployee !=null && removeEmployee.WorkStatus == "Available")
{
context.Employees.Remove(removeEmployee);
context.SaveChanges();
return true;
}
}
return false;
}
员工控制器:
[HttpPost]
public IActionResult Remove(int[] employeeIds)
{
if (repo.RemoveEmployee(employeeIds) == false)
{
return Redirect("/Employee/Remove");
}
else
{
return Redirect("/Employee");
}
}
推荐阅读
- angular - 动态嵌套菜单 - 角度材质
- python - sqlite3 到 csv 并下载到桌面
- url - MAMP/WAMP - 在我的所有文件中从真实项目 URL 切换回本地主机
- python - 如何在 Django 中获取 SMTP 服务器响应代码?
- url - 用英文描述主机名/端口/URL
- python - 寻找一种有效的方法来在从其他列的值生成的 pandas 列中生成 dict
- powershell - Powershell 读取类型为 FieldUserValue[] 的 Sharepoint 列表项
- javascript - 将注释添加到完整的日历日和周视图
- android - 无法创建布局资源文件
- reactjs - 调用 Search 函数后如何保留新组件?