2010-11-12 2 views
2

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

Например:

//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!! 

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

+0

некоторой помощи, пожалуйста? – OrPaz

ответ

1

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

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

Чтобы решить эту проблему достаточно просто обновить объект с помощью:

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

Надеется, что это помогает, Орану

Смежные вопросы