Как DataContext обрабатывает параллелизм? - PullRequest
2 голосов
/ 21 июня 2010

Интересно, как DataContext обрабатывает нарушение параллелизма.

Например -

Два пользователя извлекают некоторые данные из базы данных, затем некоторые из них изменяют некоторые строки и фиксируют изменения, затем другой пользователь пытается зафиксировать свои изменения, чтобы произошло ChangeConflictException, но как DataContext узнает, что данные изменились ?

Получаете эти данные снова и сравниваете? Или какой-то механизм уведомления базы данных?

Ответы [ 3 ]

0 голосов
/ 22 июня 2010

Предыдущие значения всех столбцов, которые не были изменены и помечены UpdateCheck, включены в предложение where сгенерированного оператора обновления. Если обновление затронуло 1 строку, все в порядке - если оно затронуло 0 строк (например, кто-то еще изменил одно из этих значений, следовательно, не смог найти строку после фильтрации), вы получите исключение ChangeConflictException.

0 голосов
/ 13 мая 2011

Да, он снова выбирает данные для проверки параллелизма.

LINQ to SQL использует оптимистичный контроль параллелизма, что означает, что L2S проверяет состояние данных, а не блокирует данные. Вы можете указать, какой столбец L2S следует использовать, чтобы определить, изменены данные или нет. По умолчанию он сравнивает каждый столбец.

См. Понимание LINQ to SQL (9) Параллельный конфликт для подробного обсуждения.

0 голосов
/ 21 июня 2010

Управление параллелизмом может осуществляться с помощью столбца TimeStamp в базе данных или атрибута UpdateCheck в LINQ-to-SQL.

Обзор параллелизма MSDN (LINQ-to-SQL)

MSDN Как управлять конфликтами изменений (LINQ-to-SQL)

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