Linq to SQL, обратные вызовы Ajax и состояние страницы в ASP.NET - PullRequest
1 голос
/ 05 мая 2009

Это должен быть частый вопрос, но пока не на 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». Я думаю, что Я кое о чем , но пока не знаю решения.

Ответы [ 2 ]

2 голосов
/ 05 мая 2009

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

p.PhysicianSpecialties [0] .PhysicianSpecialtyLookup = db.PhysicianSpecialtyLookups.Single (c => (c.physician_specialty_code == ddlSpecialty.SelectedItem.Value));

0 голосов
/ 29 мая 2009

И как это сделать, если используется привязка данных? У меня есть выпадающий список в виде сетки данных, который начал выдавать эту ошибку, когда я меняю значение выпадающего Это заставляет меня думать, что я должен либо удалить связь, либо не использовать привязку данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...