И я имею в виду случай, когда я использую и базу данных, и файл для хранения данных, или две базы данных, и мне хочется время от времени синхронизировать эти хранилища.
Когда данные не синхронизированы, но коллизий нет, решение тривиально, например:
Код: Выделить всё
Storage A
----------+----------+-----------+
Id | Name | Login |
----------+----------+-----------+
1 | Jonh | Login1 |
3 | Alice | Login2 |
4 | Jane | Login3 |
----------+----------+-----------+
Storage B
----------+----------+-----------+
Id | Name | Login |
----------+----------+-----------+
1 | Jonh | Login4 |
2 | Mike | Login5 |
5 | Nick | Login6 |
----------+----------+-----------+
Код: Выделить всё
var diffA = storageA.Except(storageB);
var diffB = storageB.Except(storageA);
storageA.AddRange(diffB);
storageB.AddRange(diffA);
Код: Выделить всё
Storage A and Storage B
----------+----------+-----------+
Id | Name | Login |
----------+----------+-----------+
1 | Jonh | Login1 |
2 | Mike | Login5 |
3 | Alice | Login2 |
4 | Jane | Login3 |
5 | Nick | Login6 |
----------+----------+-----------+
Код: Выделить всё
Storage A
----------+----------+-----------+
Id | Name | Login |
----------+----------+-----------+
2 | Mike | Login5 |
----------+----------+-----------+
Storage B
----------+----------+-----------+
Id | Name | Login |
----------+----------+-----------+
2 | NotMike | Login9 |
----------+----------+-----------+
Я знаю, что могу, например, изменить поле идентификатора для второго хранилища, установить его до 6 или что-то еще, доступное во всех хранилищах, которые я пытаюсь синхронизировать, но тогда как быть с другими таблицами/коллекциями, которые ссылаются на новую конфликтующую строку?
А что, если те таблицы, которые ссылаются на упомянутую таблицу, также сталкиваются?
Как разработчики программного обеспечения подходят к такой проблеме?
Подробнее здесь: https://stackoverflow.com/questions/792 ... collection