Как удалить объект EntityObject, принадлежащий коллекции объектов EntityObject, из ObjectContext? - PullRequest
1 голос
/ 25 января 2012

Я хочу выполнить удаление на моем ObjectContext.

Это мой код:

var tempList = someEntityObject.SomeCollectionOfEntityObject;

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Вместо использования foreach для tempList вы можете сначала заполнить коллекции некоторым реальным временным списком.

var realList = tempList.ToList();

Затем вы очищаете tempList и затем можете перебирать realList.

1 голос
/ 25 января 2012

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

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

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

1 голос
/ 25 января 2012

Вместо этого используйте цикл while:

while(someEntityObject.SomeCollectionOfEntityObject.Count > 0)
{ 
    someObjectContext.DeleteObject(someEntityObject.SomeCollectionOfEntityObject.First());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...