Если у вас есть подлинные проблемы с одновременным обновлением одних и тех же данных, то вы можете рассмотреть возможность выполнения всей операции в транзакции, то есть получения данных и , фиксирующих их. Пока вы воспринимаете get / update / commit как недолговечную атомарную операцию (т.е. вы не приостанавливаете ввод данных в середине), все должно быть в порядке.
В частности, с сериализуемым уровнем изоляции никто не может обновлять данные, к которым у вас есть блокировка чтения (т.е. все, что вы запросили). Единственная проблема заключается в том, что это может привести к тупиковым сценариям, если разные запросы читают данные в разных порядках. AFAIK, нет способа заставить LINQ-to-SQL выдать подсказку (UPDLOCK), что является позором.
Подойдет либо TransactionScope, либо SqlTransaction, если они установлены в качестве сериализуемой изоляции (по умолчанию для TransactionScope).