Обновление базы данных - QualitySolution/QSProjects GitHub Wiki

Общее описание

Библиотека QS.Updater реализует механизм обновления базы данных. После обновления версии программы при входе пользователя программа может проверить необходимость обновления базы данных.

Обновления существуют двух видов. Полноценное обновление базы данных и микро обновление. С версии 1.7 в коде нет деления обновлений на типы, оно осталось только в нумерации версий.

Полноценное обновление - Выполняется при переходе на следующую значительную версию продукта, то есть при изменении первых двух цифр версии. Например 2.2 -> 2.3. Номер версии базы данных хранится в таблице base_parameters в параметре version. Если версия базы не соответствует текущей версии программы, осуществляется обновление базы до актуального релиза.

Микро-обновление - Небольшие обновления базы данных не ломающие обратную совместимость внутри поддерживаемой ветки. Например на версии 2.3.5 решили увеличить одно из полей базы данных и допустим добавить еще поле комментария в документа. Эти изменения базы данных никак не скажутся на работе программ версии до 2.3.5, так как нового поля они просто не увидят, а размер поля увеличился, они просто не будут знать что можно записать больше текста. Поэтому выполнять полноценное обновление нет необходимости, можно применить микро-обновления, не обновляя все установленные версии приложений.

Настройка обновления

configuration.AddUpdate (
	new Version (1, 0),
	new Version (1, 1),
	"workwear.Updates.1.1.sql");

Настройка Autofac

Ниже приведен пример минимальной настройки Autofac для работы всего модуля обновлений:

builder.RegisterType<BaseParameters>().As<ParametersService>(); 
builder.Register(c => QSProjectsLib.QSMain.ConnectionStringBuilder).AsSelf(); 
builder.RegisterType<MySQLProvider>().As<IMySQLProvider>();
builder.RegisterType<GtkGuiDispatcher>().As<IGuiDispatcher>(); 
builder.RegisterType<GtkRunOperationService>().As<IRunOperationService>();
builder.Register(cc => new ClassNamesBaseGtkViewResolver(typeof(UpdateProcessView))).As<IGtkViewResolver>();
builder.RegisterType<ApplicationVersionInfo>().As<IApplicationInfo>(); 
builder.RegisterModule(new UpdaterAutofacModule()); 
builder.Register(c => MainClass.MakeUpdateConfiguration()).AsSelf();

Обратите внимание

  • Для корректной работы скриптов !!!НИКОГДА!!! не указывай в скрипте название схемы(базы).
  • Не забудь добавить скрипт как встроенный ресурс к проекту.