Я написал метод расширения для добавления элементов в (EF) EntityCollection.Я получил интересную ошибку, сказав, что моя коллекция IEnumerable ("items") была изменена после первого цикла в foreach.Когда я превращаю элементы в items.ToList () (как в приведенном ниже коде), он работает нормально.
Я полностью понимаю, что выполнение ToList () создаст копию элементов, с которыми затем будет работать foreach..
Что я НЕ понимаю, так это то, что модифицирует IEnumerable, когда я выполняю foreach над ним.
Обновление: каким-то образом кажется, что переменная items такая же, как переменная collection?
Обновление 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);
}