Удалить дочерние объекты - PullRequest
1 голос
/ 17 января 2011

Я пытаюсь обновить ресурс следующим образом:

  public void Update(Resource resource) {

   Resource _resource = _resourceRepository.First(r => r.Id == resource.Id);

   _resource.Content = resource.Content;
   _resource.Description = resource.Description;
   _resource.Locked = resource.Locked;
   _resource.Name = resource.Name;

   _resource.Restrictions.ToList().ForEach(r => _resource.Restrictions.Remove(r));

   foreach (Restriction restriction in resource.Restrictions)
    _resource.Restrictions.Add(new Restriction { Property = _propertyRepository.First(p => p.Id == restriction.Property.Id), Value = restriction.Value });

  } // Update

У меня есть нечто подобное, и я работаю, чтобы создать ресурс только с одним отличием: я не удаляю ограничения.

Я получаю следующую ошибку:

Отношения от 'Restrictions_ResourceId_FK' AssociationSet находится в «Удален» государство. Учитывая ограничения множественности, соответствующие «Ограничения» должны также в состоянии «Удалено».

Чего мне не хватает?

Ответы [ 2 ]

11 голосов
/ 17 января 2011

EF сделал именно то, что вы сказали ему сделать.Удаление элемента из коллекции навигации родительского объекта только удаляет связь между родительским и дочерним объектом.Это означает, что для ResourceId в Ограничении устанавливается только значение null, которое не допускается вашей моделью сущности.

Если ваше Ограничение не может существовать без связанного ресурса, вы должны смоделировать отношение как Идентификация.Это означает, что первичный ключ Restriction будет также содержать столбец ResourceId.Когда вы затем удалите ограничение из коллекции родительских объектов, EF удалит ограничение вместо того, чтобы установить для ResourceId значение null.

3 голосов
/ 04 апреля 2011

У меня были похожие проблемы, поскольку противоположность Add () явно казалась Remove ().

Для удаления дочерних элементов вы должны использовать функцию DeleteObject ().

Спасибо.

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