В моем текущем приложении все данные хранятся в базе данных с использованием структуры сущностей.
Теперь мне нравится реализовывать функцию «экспорт / резервное копирование в файл» и соответствующую функцию «импорт / восстановление из файла» в приложении agnosti c базовой базы данных, без использования методов резервного копирования / восстановления базы данных.
Восстановление должно привести данные к состоянию, в котором они находились непосредственно перед этим. резервная копия, поэтому изменения после этого следует отбросить.
Она разбита на следующие части для резервного копирования:
- загрузка всех объектов (от root объектов до дочерних элементов) из базы данных
- сериализация объектов в строку
- запись этой строки в файл
И для восстановления:
- чтение файла
- десериализовать содержимое файла в объекты
- удалить все существующие объекты в базе данных
- записать все объекты в базу данных
Резервное копирование в основном выполняется с использованием кода этого сообщение (* 103 1 *{ ссылка }) и использование JSON. net для сериализации результирующих данных:
var data = db.Set<Blog>().Include(db.GetIncludePaths(typeof(Blog))).ToList(); // both Include() and GetIncludePaths() from https://stackoverflow.com/a/49597502/226278
var stringToFile = JsonConvert.SerializeObject(data, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
// write string to file
Также выполняется большая часть восстановления:
// read string from file
var data = JsonConvert.DeserializeObject<List<Blog>>(stringFromFile, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
_context.AddRange(data);
_context.SaveChanges();
Я борюсь с тем, чтобы очистить базу данных перед восстановлением всех объектов. Каков наилучший и наиболее эффективный способ EF-ядра?
Кроме того, это не должно зависеть от базовой базы данных, поэтому любые решения, включая ExecuteSqlCommand()
, вероятно, не то, что я хочу.