Вы не блокируете записи для клиентов, потому что блокировка записи для чего-то более чем на несколько миллисекунд - это почти самая разрушительная вещь, которую можно сделать в базе данных. Вместо этого следует использовать Оптимистичный параллелизм : вы определяете, была ли запись изменена с момента последнего чтения, и повторно пытаетесь выполнить транзакцию (например, вы повторно отображаете экран для пользователя). Как это будет реализовано, будет зависеть от того, какую технологию БД вы используете (ADO.Net, DataSets, Linq, EF и т. Д.).
Если бизнес-домен требует блокировочного поведения, они всегда реализуются как логика резервирования в базе данных: когда отображается запись, она «зарезервирована», чтобы другие пользователи не могли попытаться выполнить ту же транзакцию. Бронирование завершено или истекло или отменено. Но «резервирование» никогда не выполняется с использованием блокировок, это всегда явное обновление состояния с «доступно» на «зарезервировано» или что-то подобное.
Этот шаблон также описывает din P EAA: Оптимистическая блокировка в автономном режиме .