清除EntityCollection然后在同一事务中添加到它似乎不可能

时间:2010-04-08 14:26:11

标签: entity-framework

我有2个实体,一个部门和一个员工。 1部门可以有很多员工。我想清除现有部门的所有员工,并将新员工添加到同一部门,然后保存更改。它必须在一次交易中。

但是当我尝试执行下面的代码时,我在数据库上遇到密钥违规错误。看来clear不是删除DepartmentEmployee表中的项目,然后插入新的Employee。

Employee newEmployee = GetNewEmployee();
department.Employees.Clear();
department.Employees.Add(newEmployee);
EntityContext.ApplyPropertyChanges("SetName", department);
EntityContext.SaveChanges();

对此的任何帮助将不胜感激。感谢。

1 个答案:

答案 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();
}