Entity Framework 4 Удалить объект из коллекции объектов - PullRequest
14 голосов
/ 07 февраля 2011

У меня есть объект «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 ]

21 голосов
/ 07 февраля 2011

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

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

Example EF model

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

1 голос
/ 07 февраля 2011

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

newRequest.Properties.Clear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...