Такие схемы блокировки известны как пессимистичные блокировки и более подвержены проблемам, чем альтернатива оптимистической блокировки.Оптимистичный вообще не является механизмом блокировки;это позволяет любому пользователю, у которого есть та же самая запись, попытаться сделать их редактирование.В рамках обновления ORM передает все предыдущие значения обратно в дБ и формирует запрос таким образом, что сравнивает каждое текущее значение таблицы с каждым предыдущим значением, известным в orm (с момента извлечения записи).Если какие-либо значения были изменены другим пользователем, обновление завершится неудачно и вернет 0 записей обновлений.На этом этапе orm может выдать вам исключение, указывающее, что кто-то еще редактировал ту же запись.Вы используете это исключение и информируете пользователя, возможно, давая ему выбор, что делать:
- перезаписать свои с моим
- оставить свои и отказаться от моего
- объединитьс их
Вы видели это при кодировании и фиксации ваших изменений в управлении исходным кодом, я уверен:)
Конечно, вы должны написать интерфейс для этогоно обычно это правильно, потому что только пользователь может знать, какими должны быть данные.Если вы не предлагаете объединение, тогда это может быть простое диалоговое окно «оставь меня / оставь их»
Ваше предложение хранить вещи в очереди и только последовательно вносить изменения не имеет особого смысла дляменя, потому что второе редактирование - это редактирование данных, которые уже отредактировал первый пользователь;откуда вы знаете, что у вас получится действительное состояние, если вы решите проблему параллелизма программно?Если вы просто хотите переписать изменения person1 в person2, то вам вообще не нужен контроль параллелизма
Я уже говорил о том, как работает оптимистичная система параллелизма, но при условии, что вы используете EF Core,в прекрасном руководстве есть много чего сказать: https://docs.microsoft.com/en-us/ef/core/saving/concurrency