集合被修改;枚举操作可能无法执行。英孚核心 2.2
Collection was modified; enumeration operation may not execute. EF Core 2.2
我需要一些帮助来解决这个问题,我使用的是 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()
at System.Collections.Generic.Dictionary2.ValueCollection.Enumerator.MoveNext()
at System.Linq.Enumerable.ConcatIterator
1.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
感谢您的帮助...
问题是 foreach
循环假定一个不可变的集合来迭代它。也就是说,在循环发生时不能修改集合;换句话说,循环开始时的集合必须在整个循环执行期间保持不变。
因此,在循环发生时修改集合的状态会导致抛出异常。这与 EF 无关,它是 foreach
循环的一个特征。
我需要一些帮助来解决这个问题,我使用的是 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() at System.Collections.Generic.Dictionary
2.ValueCollection.Enumerator.MoveNext() at System.Linq.Enumerable.ConcatIterator
1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
感谢您的帮助...
问题是 foreach
循环假定一个不可变的集合来迭代它。也就是说,在循环发生时不能修改集合;换句话说,循环开始时的集合必须在整个循环执行期间保持不变。
因此,在循环发生时修改集合的状态会导致抛出异常。这与 EF 无关,它是 foreach
循环的一个特征。