Entity Framework 4 Удалить объект из коллекции объектов

У меня есть "Request" Entity с отношением 1.. * к объекту RequestProperty. Итак, в объекте "Запрос" есть коллекция объектов RequestProperty. Когда я обновляю "запрос", я хочу удалить все элементы в EntityCollection RequestProperty и добавить новые элементы из объекта входящего домена. Когда я перебираю коллекцию Request.Properties и вызываю удаление или DeleteObject в элементе, перечисление терпит неудачу, потому что коллекция была изменена.

На данный момент я делаю это:

while (true)
{
    if (newRequest.Properties.Count > 0)
        context.RequestPropertySet.DeleteObject(newRequest.Properties.First());
    else
        break;
}

Так как это не очень "круто", я подумал, что должен быть другой способ опорожнить коллекцию отношений. Спасибо за ваши мысли.

Ответ 1

Ответ зависит от способа моделирования ваших объектов. Если вы используете общее независимое отношение или отношение внешнего ключа, вам придется использовать свой текущий подход - я использую его также в своем проекте.

Если вы определили отношение идентификации, вы сможете вызвать только Clear в коллекции, как описано в @Craig. Идентификация отношения - это особое отношение, где первичный ключ зависимого объекта содержит внешний ключ родительского объекта.

Example EF model

В примере показан объект Order и объект OrderItem с внешним ключом, идентифицирующим связь между ними. Первичный ключ OrderItem состоит из уникальных Id и OrderId, который является таблицей FK таблицы Order. В этой конфигурации вам не нужно выполнять итерацию через OrderItem и удалять каждый элемент отдельно. Просто удаление OrderItem из коллекции будет выполняться как удаление в базе данных, а очистка коллекции удалит все связанные OrderItem в базе данных.

Ответ 2

Используйте метод Clear():

newRequest.Properties.Clear();