Linq To Sql - исключение ChangeConflictException Зачем? - PullRequest
0 голосов
/ 18 марта 2009

Я пытаюсь вызвать исключение ChangeConflictException, изменяя записи в двух разных браузерах. Это работало для меня в прошлом. Но теперь это не приведет к исключению.

Последний выигрывает.

Я проверил свойства столбца обновляемого объекта, и каждый столбец настроен на постоянную проверку.

Есть ли что-нибудь, что я могу найти?

Я не расширял этот контекст данных и не вносил никаких изменений ни в одно из свойств.

Спасибо.

Редактировать

Это приложение ASP.net.

Ответы [ 2 ]

2 голосов
/ 18 марта 2009

Вы уверены, что это не то, что происходит:

  1. Браузер A загружает объект X
  2. Браузер B загружает объект X
  3. Браузер А отправляет форму
  4. Браузер A снова загружает объект X, изменяет свойство и снова сохраняет
  5. Браузер B отправляет форму
  6. Браузер B снова загружает объект X, изменяет свойство и снова сохраняет

Ключевым моментом здесь является то, что объект перезагружается при обратной передаче (HTTP = без сохранения состояния), и в 6) вы фактически загружаете изменения, сделанные с помощью 4), и перезаписываете их. Linq2Sql не «штампует» вашу форму, вам придется сделать это вручную.

Вы пишете в комментариях, что у вас есть другое приложение, которое работает. Если это приложение для Windows, то ситуация совершенно иная, так как объект, скорее всего, больше не будет перезагружен.

0 голосов
/ 18 марта 2009

Это состояние гонки. Представьте, что вы, вероятно, получаете информацию, обновляете и отправляете в базу данных. Если первый фиксирует изменения в БД, перед тем, как второй извлечет информацию, вы не получите конфликта.

Обновление: О комментарии о невозможности сделать это. Вы можете сделать это, вы используете метод Attach, но вам нужно сохранить любые исходные значения, которые вы хотите, чтобы он проверял на параллелизм. Проверьте это:

linq2sql-update-object-not-создал-in-datacontext

, как к обновлению-а-один столбец-в-без-LINQ-загрузка-The-весь-строка

Это, безусловно, то, что происходит под источником данных linq.

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