По сути, я отделил свой код, введя Репозиторий сотрудников для обработки всего взаимодействия с базой данных.Моя проблема в том, что мой код выполняет инструкции, но затем выдает
System.InvalidOperationException: «Последовательность не содержит элементов».
Я пытался использовать FirstOrDefault
и SingelOrDefault
как и предполагалось, но в предыдущих постах я читал, но он выполняет операцию удаления и выдает
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("/");
}
}