我有一个名为Employee
的模型,其中一个名为OnDuty的布尔字段。我们的业务规则只允许一名员工值班。
在index
页面上,我设置了复选框,以便触发更新呼叫以将员工更新为“待命”。但是,我没有使用下面的控制器操作将任何其他员工设置为off duty
。我如何确保没有其他员工值班?
[HttpPost]
public JsonResult Update(Employee employee)
{
IEnumerable<Employee> onCallEmployee = _db.Employees.Where(e => e.OnCall == true);
foreach (Employee e in onCallEmployee) {
e.OnCall = false;
_db.Entry(e).State = EntityState.Modified;
_db.SaveChanges();
}
_db.Entry(employee).State = EntityState.Modified;
_db.SaveChanges();
return Json("Employee updated!");
}
答案 0 :(得分:0)
我的错误似乎是由于我尝试更新员工的方式造成的。我必须从onCallEmployee
中排除已由函数更新的员工,因为在尝试保存更新时会抛出错误(Attaching an entity of type 'Employee' failed because another entity of the same type already has the same primary key value.
)。
另外,基于@ mwwallace8,建议,我从for循环中删除了SaveChanges()
调用,并在最后留下了一个调用。
[HttpPost]
public JsonResult Update(Employee employee)
{
IEnumerable<Employee> onCallEmployee = _db.Employees.Where(e => e.OnCall == true && e.ID != employee.ID);
foreach (Employee e in onCallEmployee) {
e.OnCall = false;
_db.Entry(e).State = EntityState.Modified;
}
_db.Entry(employee).State = EntityState.Modified;
_db.SaveChanges();
return Json("Employee updated!");
}