резервное копирование / восстановление в / из файла с ядром структуры сущностей независимо от базы данных - PullRequest
0 голосов
/ 29 января 2020

В моем текущем приложении все данные хранятся в базе данных с использованием структуры сущностей.

Теперь мне нравится реализовывать функцию «экспорт / резервное копирование в файл» и соответствующую функцию «импорт / восстановление из файла» в приложении 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(), вероятно, не то, что я хочу.

1 Ответ

0 голосов
/ 29 января 2020

Можете ли вы переименовать старую базу данных и начать со схемы fre sh для вставки данных в?

...