2012-01-25 4 views
1

Я хотел бы выполнить удаление на моем ObjectContext.Как удалить объект EntityObject, принадлежащий коллекции объектов EntityObjects, из ObjectContext?

Это мой код:

var tempList = someEntityObject.SomeCollectionOfEntityObject; 

foreach (var item in tempList) 
{ 
    someObjectContext.DeleteObject(item); 
    tempList.Remove(item); 
} 

Я хочу удалить someEntityObject, но прежде, чем я могу, мне нужно удалить все объекты SomeCollectionOfEntityObject. У меня есть ограничение внешнего ключа, которое мешает мне удалять someEntityObject.

Когда Еогеасп пытается цикла во второй раз я получаю эту ошибку:

System.InvalidOperationException occurred 
    Message=Collection was modified; enumeration operation may not execute. 

ответ

3

Вместо использования Еогеасп на TempList вы можете заполнить коллекции в некоторый настоящий временный список.

var realList = tempList.ToList(); 

Затем вы очищаете tempList, а затем можете выполнять итерацию по realList.

+1

Так я бы тоже сделал – KroaX

+0

@KroaX Вы правы. Этот путь быстрее. Меньше кода. =) – Willem

1

Используйте время цикла вместо:

while(someEntityObject.SomeCollectionOfEntityObject.Count > 0) 
{ 
    someObjectContext.DeleteObject(someEntityObject.SomeCollectionOfEntityObject.First()); 
} 
+0

Прохладный, он работает! Thx – Willem

1

Другой вариант - указать каскадное удаление в отношении.

Это приведет к удалению всех записей в SomeCollectionOfEntityObject автоматически при удалении объекта someEntityObject.

Обратите внимание, что вы должны сделать это как для модели, так и для базы данных, чтобы она работала надежно. См. Это сообщение для получения дополнительной информации: http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx.

+0

+1. Выглядит неплохо! – Willem

Смежные вопросы