Ошибка в странном сценарии при обновлении связанных данных объекта - PullRequest
1 голос
/ 08 апреля 2020

Я использую. Net Ядро 3.1 с EF, и я получил эту ошибку

Предполагается, что операция с базой данных затронет 1 строку (и), но фактически затронет 0 строк. Данные могут быть изменены или удалены, так как объекты были загружены.

У меня есть эта простая функция

public async Task<List<User>> ChangeUsersListStatus(List<User> users, string status)
{
    foreach(User user in users)
    {
        user.Status = status;
        _context.Users.Update(user);
    }

    await _context.SaveChangesAsync();
    return users;
}

, и когда я вызываю ее с использованием загруженных связанных данных, как показано ниже вышеуказанная ошибка

await _context.Entry(employee).Collection(e => e.Users).LoadAsync();
await _userService.ChangeUsersListStatus(employee.Users, UserStatus.Active);

Но если я получу список пользователей, который выглядит так, что у меня нет ошибок, и он будет работать нормально

List<User> usersToDeactivate = await _context.Users.Where(e => e.EmployeeForeignKey == employee.Id).AsNoTracking().ToListAsync();
await _userService.ChangeUsersListStatus(usersToDeactivate, UserStatus.Active);

И мое, почему такое поведение происходит, мне просто нужно чтобы понять, почему ORM видит, что «employee.Users» отличается от списка пользователей.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...