我有2个实体,一个部门和一个员工。 1部门可以有很多员工。我想清除现有部门的所有员工,并将新员工添加到同一部门,然后保存更改。它必须在一次交易中。
但是当我尝试执行下面的代码时,我在数据库上遇到密钥违规错误。看来clear不是删除DepartmentEmployee表中的项目,然后插入新的Employee。
Employee newEmployee = GetNewEmployee();
department.Employees.Clear();
department.Employees.Add(newEmployee);
EntityContext.ApplyPropertyChanges("SetName", department);
EntityContext.SaveChanges();
对此的任何帮助将不胜感激。感谢。
答案 0 :(得分:4)
我认为你不能在SaveChanges
的一次电话中这样做。实体框架不保证任何特定的操作顺序。因此,我认为没有任何方法可以强制DELETE在INSERT之前进行,而无需额外调用SaveChanges
。
另一方面,您可能可以在一个数据库事务中执行此操作。只需在新的TransactionScope
内完成。
尝试:
using (var t = new TransactionScope())
{
Employee newEmployee = GetNewEmployee();
department.Employees.Clear();
EntityContext.SaveChanges();
department.Employees.Add(newEmployee);
EntityContext.ApplyPropertyChanges("SetName", department);
EntityContext.SaveChanges();
t.Complete();
}