Как удалить дочернюю сущность из родительской коллекции с помощью Entity Framework 4? - PullRequest
9 голосов
/ 21 мая 2010

Я использую Entity Framework 4 и имею отношение один-ко-многим между родительским и дочерним объектом. Я пытаюсь удалить дочерний объект с помощью родительского репозитория, удалив его из родительской коллекции детей:

public virtual void RemoveChild(Child child)
        {
            children.Remove(child);
        }

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

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

Конечно, мне не нужно явно удалять дочернюю сущность, используя дочерний репозиторий!

Ответы [ 3 ]

3 голосов
/ 24 августа 2012

Для решения этой проблемы я наткнулся на следующее переопределение в DbContext:

public override int SaveChanges()
{
    Set<Child>()
    .Local
    .Where(r => !Parent.Local.SelectMany(s => s.Children).Contains(r))
    .ToList()
    .ForEach(r => Set<Child>().Remove(r));

    return base.SaveChanges();
}

Взгляните сюда: http://blog.oneunicorn.com/2012/06/02/deleting-orphans-with-entity-framework/

1 голос
/ 27 июня 2012

В EF4, если все дочерние объекты и родительский объект присоединены к ObjectContext, тогда EF будет синхронизировать ссылки на внешние ключи и ссылки на объекты как в родительском, так и в затронутом дочернем объектах.

1 голос
/ 21 мая 2010

Зависит от того, есть ли у вас каскад в БД. Если вы делаете (и, учитывая ваш вопрос, вы, вероятно, должны), то это должно быть автоматическим. Вы можете прочитать об этом здесь .

...