Очистить коллекцию EntityCollection, а затем добавить к ней в той же транзакции не представляется возможным - PullRequest
3 голосов
/ 08 апреля 2010

У меня есть 2 подразделения: отдел и сотрудник. 1 отдел может иметь много сотрудников. Я хотел бы удалить всех сотрудников из существующего отдела, а также добавить нового сотрудника в тот же отдел, а затем сохранить изменения. Это должно быть в пределах одной транзакции.

Однако, когда я пытаюсь выполнить приведенный ниже код, я получаю ошибку нарушения ключа в базе данных. Кажется, что очистка не удаляет элементы в таблице DepartmentEmployee, а затем вставляет нового сотрудника.

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

Любая помощь с этим будет принята с благодарностью. Спасибо.

1 Ответ

4 голосов
/ 08 апреля 2010

Не думаю, что вы можете сделать это за один звонок SaveChanges. Entity Framework не гарантирует какой-либо конкретный порядок операций. Поэтому я не думаю, что есть какой-либо способ заставить 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...