Я написал метод расширения для добавления элементов в (EF) EntityCollection. Я получил интересную ошибку, говоря, что моя коллекция IEnumerable ("items") была изменена после первого цикла в foreach. Когда я превращаю элементы в items.ToList () (как в приведенном ниже коде), он работает нормально.
Я полностью понимаю, что выполнение ToList () создаст копию элементов, с которыми затем будет работать foreach.
Я НЕ понимаю, что меняет IEnumerable, когда я выполняю над ним foreach.
Обновление: почему-то кажется, что переменная items совпадает с переменной коллекций?
Обновление 2: Я думаю, что отслеживание сущностей EF может повлиять на коллекцию и сущность, но я все еще не понимаю, почему
Использование:
ssp.ServiceAreas.ReplaceCollection (model.ServiceAreas);
Вот мой метод расширения:
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, IEnumerable<TEntity> items)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
foreach (var item in items.ToList())
collection.AddOrUpdate(item);
}
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, TEntity item)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
if (item.ID > 0 && collection.Any(c => c.ID == item.ID))
collection.Remove(collection.First(c => c.ID == item.ID));
// For now, the Remove NEVER gets hit
collection.Add(item);
}