集合已修改;枚举操作可能无法执行。 EF Core 2.2

问题描述 投票:1回答:1

我需要有关此问题的帮助,我使用EF Core 2.2和ASP.Net Core 2.2

我正在尝试从我的实体(用户)中删除一些电话,但是在执行dbcontext.SaveChanges()时会产生异常:集合已修改;枚举操作可能无法执行。

我的用户服务

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

和我的RepositoryClass

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

我的异常StackTrace

System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()在System.Collections.Generic.Dictionary2.ValueCollection.Enumerator.MoveNext() at System.Linq.Enumerable.ConcatIterator1.MoveNext()在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

ty帮忙...

c# asp.net-core-2.2 ef-core-2.2 ddd-repositories
1个回答
0
投票

问题在于,foreach循环假定一个不可变的集合对其进行迭代。因此,修改集合的状态会引发异常。这与EF无关,它是foreach循环的特征。

© www.soinside.com 2019 - 2024. All rights reserved.