Это должен быть частый вопрос, но пока не на SO, так что кажется. Я использую Linq to SQL для приложения, которое допускает различные изменения данных в моей модели в памяти, и затем эти изменения помещаются в очередь для асинхронной обработки. Итак, я не беспокоюсь об обновлениях (пока).
Изменения в различных частях данных могут быть сделаны через модальные всплывающие окна на веб-странице. Некоторые основаны на сетке, другие - просто атрибуты.
Я сталкиваюсь с проблемой с изменениями, не переживающими циклы обратной передачи. Очевидно, я не хочу ничего сохранять в базе данных, пока не будут внесены все изменения и пользователь не отправит страницу.
Маршрут, который я выбрал до сих пор:
- Я отключил отложенную загрузку
- Я создаю [serializable] частичный класс для моего корневого объекта
- Я помещаю вещь в сессию и извлекаю ее в событии onload
Кажется, это работает в принципе. Однако, когда я пытаюсь обновить некоторые из дочерних свойств после извлечения объекта из сеанса
p.PhysicianSpecialties[0].physician_specialty_code =
ddlSpecialty.SelectedItem.Value;
Я получаю эту ошибку:
Operation is not valid due to the current state of the object.
Ошибка вызвана этим вызовом метода в сгенерированном методе установки Linq:
this.SendPropertyChanging();
Другие свойства обновляются просто отлично:
p.PhysicianNames[0].first_name = txtFirstName.Text.ToUpper();
Это не вызывает ошибку.
Мои вопросы: я принципиально не на том пути? Есть ли лучший способ сделать это? Что вызывает ошибку?
Обновление:
Исключением является «System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException». Я думаю, что Я кое о чем , но пока не знаю решения.