Коллекция была изменена;Операция перечисления может не выполняться. EF Core 2.2 - PullRequest
1 голос
/ 12 октября 2019

Мне нужна помощь в решении этой проблемы, я использую EF Core 2.2 и ASP.Net Core 2.2

Я пытаюсь удалить некоторые телефоны из моей сущности (пользователя), но при выполнении dbcontext.SaveChanges ()создать исключение: коллекция была изменена;Операция перечисления может не выполняться.

My UserService

User entity = _userRepository.GetById(model.Id);

var numbers = GetDeletePhoneNumbers(model, entity.UserPhones.ToList());

foreach (var number in numbers)
{                
   entity.RemoveUserPhones(_userPhoneRepository.GetByPhoneNumber(number));

   _userRepository.Modify(entity);
}

Мой метод получения телефонов удаления

 private List<string> GetDeletePhoneNumbers(UserModel model, List<UserPhone> userPhones)
 {
    return userPhones.Where(c => !model.Phones.Any(u => u.Number == c.Phone.Number)).Select(c => c.Phone.Number).ToList();
 }

И мой класс репозитория

protected override void InternalModify(TEntity entity)
{           
    this._dbContext.Set<TEntity>().Update(entity);
    _dbContext.SaveChanges();           
}

мой StackTrace для исключения

System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion () в System.Collections.Generic.Dictionary 2.ValueCollection.Enumerator.MoveNext() at System.Linq.Enumerable.ConcatIterator 1.MoveNext () в System.Linq.EnumeNove.Werable.here)

Ты за помощь ...

1 Ответ

0 голосов
/ 13 октября 2019

Проблема в том, что циклы foreach предполагают неизменную коллекцию для ее итерации. Следовательно, изменение состояния коллекции приводит к возникновению исключения. Это не имеет ничего общего с EF, это характеристика петли foreach.

...