WPF ObjectContext Attach Detach - не работает - PullRequest
0 голосов
/ 02 сентября 2010

Я внедряю ObservableCollection для управления моими сущностями EF.Когда я хочу отредактировать некоторую сущность, я создаю клон сущности и открываю ее во всплывающем окне.Когда пользователь заканчивает редактировать клонированную сущность, я продолжаю отсоединять исходную сущность и затем присоединяю новую (клонированную и отредактированную) сущность.

Исключений не возникает, но обновление базы данных не происходит.

Вот метод, который выполняет обновление.Это переопределение метода ObservableCollection SetItem:

protected override void SetItem(int index, T item)
    {
        T oldItem = Items.ElementAt(index);
        base.SetItem(index, item);

        try
        {
            ContextManager.CurrentObjectContext.Detach(oldItem);
            ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
            ContextManager.CurrentObjectContext.SaveChanges();

        }
        catch (Exception err)
        {
            base.SetItem(index, oldItem);
            MessageBox.Show(err.Message);
        }
    }

Значительно оценит любую помощь ...

Заранее спасибо, Оран

1 Ответ

1 голос
/ 02 сентября 2010

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

ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified);

Вы также можете попробовать использовать это вместо:

ContextManager.CurrentObjectContext.DetectChanges(item);
...