Миграции можно выполнить при помощи консольного приложения migrate-database
и через API. При запуске нужно указать СУБД, строку подключения и сборку (.dll
) с миграциями.
При запуске можно опционально указать целевую версию БД. Мигратор по очереди будет выполнять метод Apply
у миграций в порядке возрастания номера версии, пока не дойдет до заданной. Если целевая версия меньше текущей, то произойдет откат БД с использованием метода Revert
соответствующих миграций.
Если не указывать номер версии при старте, будет выполнена миграция до последней доступной версии. Также для миграции до последней версии можно указать значение -1
.
Самый простой способ выполнить миграции — использовать консольное приложение migrate-database
. Вы можете установить его из NuGet пакета ThinkingHome.Migrator.CLI как глобальную утилиту .NET Core.
dotnet tool install -g thinkinghome.migrator.cli
При запуске нужно указать три обязательных параметра: тип СУБД, строку подключения и путь к сборке (файлу .dll
) с миграциями:
migrate-database <db_provider> <conntection_string> <migrations_dll_path>
Например:
migrate-database postgres "host=localhost;port=5432;database=migrations;" /path/to/migrations.dll
Список доступных провайдеров смотрите в разделе Поддерживаемые СУБД.
Вы можете также указать дополнительные (необязательные) параметры:
- --list — вывести список доступных миграций, не выполняя их.
- --version — целевая версия БД. Значение по умолчанию —
-1
(обновить БД до последней доступной версии) - --timeout — таймаут на выполнение SQL запросов (в секундах).
- --verbose — выводить в консоль текст выполняемых SQL запросов.
- -? | -h | --help — вывести справку.
Вы можете выполнять миграции из своего приложения через API мигратора. Например, вы можете написать приложение, которое при запуске само себе создает нужную структуру БД.
Сначала подключите в свой проект пакет ThinkingHome.Migrator из NuGet и пакет с провайдером трансформации для нужной СУБД.
После этого создайте экземпляр класса ThinkingHome.Migrator.Migrator
и вызовите его метод Migrate
, передав в качестве параметра целевую версию БД.
var version = -1;
var provider = "postgres";
var connectionString = "host=localhost;port=5432;database=migrations;";
var assembly = Assembly.LoadFrom("/path/to/migrations.dll");
using (var migrator = new Migrator(provider, connectionString, assembly))
{
migrator.Migrate(version);
}
В конструктор класса Migrator
вы можете передать последним аргументом экземпляр ILogger
(Microsoft.Extensions.Logging). В этот логгер будут записана вся информация во время выполнения миграций.
var version = -1;
var provider = "postgres";
var connectionString = "host=localhost;port=5432;database=migrations;";
var assembly = Assembly.LoadFrom("/path/to/migrations.dll");
using (var loggerFactory = new LoggerFactory())
{
loggerFactory.AddConsole(LogLevel.Trace);
var logger = loggerFactory.CreateLogger("my-logger-name");
using (var migrator = new Migrator(provider, connectionString, assembly, logger))
{
migrator.Migrate(version);
}
}