@trauus

Правильно ли организован бэкап коллекций в БД?

Есть десктопное приложение. Упрощенно, в нем есть несколько коллекций (ProductList), куда пользователь может сканировать продукты (ProductRecord) или добавлять вручную, затем отправить на сервер.
Есть требование сохранять на диск все коллекции после каждого изменения их и их элементов, чтобы при внешних сбоях избежать потери информации.

Для биндинга к UI ProductList реализует INotifyCollectionChanged, а ProductRecord - INotifyPropertyChanged.

Сейчас постоянный бэкап изменений реализован через класс Backuper, который подписан на событие ProductList.CollectionChanged и на PropertyChanged каждого ProductRecord. Далее, когда происходит одно из двух событий, ProductList целиком со всеми его ProductRecord сериализуется в файл.
На небольших коллекциях такой алгоритм работает нормально, однако в будущем хотелось перейти на БД и обновлять только изменившиеся элементы, а не коллекции целиком.
Решил попробовать SQLite + Entity Framework 6.2, и возникли вопросы:

1. Большинство статей по EF описывают способ работы с данными: [выборка] - [модификация] - [запись], а DbContext рекомендуется освобождать как можно раньше. В моем же случае время жизни списка совпадает со временем жизни приложения, выборка требуется только при старте, для загрузки сохраненных данных, дальше только модификация с последующей записью. Получается, мне нужно постоянно держать DbContext. Это допустимо, или нужен другой подход к работе с данными?
2. Вопрос относительно механизма бэкапов в целом: пытался гуглить, но не встречал подобных вариантов. Возможно, так мало кто делает потому, что есть другой подход, о котором я не знаю?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 2
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Решение определяется размером списка. Если размер такой, что возникает сильный своп по оперативной памяти, то надо работать с выборками из sql. По любому все в экран не влезет и висанет.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Вполне нормально, особенно для работы с БД.
А сущности в памяти (и на экране) тогда соответственно могут быть изменены/удалены(помечены)/добавлены, что позднее "разветвит" их поведение (в конечном итоге update / delete / insert)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы