ваша синхронизация называется проблемой параллелизма, и такая проблема должна выполняться в базе данных. Я предполагаю, что каждая RDMS (система управления базами данных отношений) имеет специальный тип для версии строки, который используется для обработки оптимистичного параллелизма. Столбец версии строки имеет особое значение, вы не можете установить его значение, но RDMS меняет свое значение каждый раз, когда изменяется запись. Сервер SQL предлагает версию строки в типе данных Timestamp.
Чтобы использовать оптимистичный параллелизм, вам нужно добавить столбец отметки времени в каждую таблицу, в которой вы хотите его обработать. Тогда вы должны использовать этот столбец. Вы должны загружать его с каждой записью, и каждое обновление / удаление должно использовать его значение в предложении WHERE. Затем вам нужно проверить количество записей аффектов, чтобы узнать, было ли обновление / удаление успешным, и обработать неудачные изменения. Это общий подход, если вы используете DbCommand и DbDataReader, относящиеся к классу напрямую. Платформа LinqToSql, DataSets и Entity имеют одинаковый уровень поддержки для оптимистичной обработки параллелизма.
Btw. можно использовать оптимистичный параллелизм без столбца Timestamp, но в этом случае вам необходимо сохранить обновленные значения вместе со старыми значениями, а затем использовать старые значения в предложении WHERE в команде обновления.
С уважением,
Ладислав