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

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

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

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

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

2 ответа

Решение

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

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

Пример EF модели

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

Использовать Clear() метод:

newRequest.Properties.Clear();
Другие вопросы по тегам