Если вы используете сервер SQL, вы можете использовать столбец отметки времени. Столбец метки времени изменяется каждый раз, когда изменяется строка. По сути, когда вы обновляете БД, вы можете проверить, совпадает ли столбец отметки времени с моментом, когда клиент впервые получил данные, если так, то никто не изменил данные.
Редактировать
Если вы хотите минимизировать пропускную способность, вы можете эмулировать концепцию временной метки, добавляя номер версии для каждого объекта. Так, например:
- Клиент 1 запрашивает объект, сервер возвращает Объект V1
- Клиент 2 запрашивает объект, сервер возвращает Object v2
- Клиент 1 изменяет объект, отправляющий его обратно на сервер, как V1
- Сервер сравнивает версию и видит v1 = v1, поэтому он фиксирует изменение
- Сервер увеличивает версию объекта, поэтому теперь его v2
- Клиент 2 модифицирует объект, отправляющий его обратно на сервер как v1
- Сервер сравнивает версию и видит v1! = V2, чтобы он выполнял все ваши политики
Для настройки вашей политики вы можете определить в конфигурации конкретный объект, который будет обрабатывать сбои политики в зависимости от типа корневого объекта. Вы можете создать интерфейс IOptomisticCheckFailurePolicy и, возможно, использовать одну из библиотек DI, например, структурную карту, для создания объекта, когда вам это нужно (хотя вы можете с такой же легкостью загрузить его с помощью отражения)