Entity Framework Refresh Entity не обновляет свои внешние ключи - PullRequest
2 голосов
/ 12 ноября 2010

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

Например:

//EditableEntity.SomeCollection --> Populated...

ContextManager.CurrentObjectContext.DeleteObject(EditableEntity);

try
{
    ContextManager.CurrentObjectContext.SaveChanges();
}
catch (Exception err)
{
    ContextManager.CurrentObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, EditableEntity);
}

//EditableEntity.SomeCollection --> Empty!!

Пожалуйста, помогите, Спасибо, Оран

1 Ответ

1 голос
/ 03 декабря 2010

Что ж, похоже, что после воссоздания EDM и перестройки проекта описанная выше процедура работает нормально.

В заключение решения: при маркировке объекта для удаления он ведет себя так, как будто он был «отсоединен» от контекста объекта, теряя связанных с ним родителей и коллекций, но фактически все еще находится в «присоединенном» состоянии. Если операция удаления отменена по какой-либо причине, использование объектов и коллекций, связанных с этим объектом, вызовет исключение. Чтобы решить эту проблему, нам нужно «прикрепить» объект обратно к контексту объекта. Проблема в том, что объект по-прежнему помечен как прикрепленный.

Чтобы решить эту проблему, просто обновите объект, используя:

ContextManager.CurrentObjectContext.Refresh(RefreshMode.StoreWins, item);

Надеюсь, это поможет, Оран

...