ThinkingHome.Migrator — система контроля версий базы данных для .NET Core, похожая на EntityFramework Migrations. Цель — автоматизировать внесение изменений в БД (например, при развертывании или обновлении приложения) и обеспечить контроль версий БД.
Все изменения БД записываются в коде миграций — классов, написанных на языке программирования (например, на C#).
Миграции компилируются в файл .dll
. После этого вы можете выполнить изменения БД с помощью консольной утилиты migrate-database, передав в параметрах строку подключения к БД и путь к файлу .dll
с миграциями.
Классы миграций наследуются от базового класса ThinkingHome.Migrator.Framework.Migration
и реализуют его методы Apply
(применить изменения) и Revert
(откатить изменения).
Внутри этих методов разработчик при помощи специального API описывает действия, которые нужно выполнить над БД. Например, добавление колонки будет выглядеть так:
public override void Apply()
{
Database.AddColumn("Table1", new Column("Num", DbType.Int32));
}
Есть также возможность выполнить произвольный SQL.
Для каждой миграции указывается номер версии, в которую перейдет БД после внесения описанных в миграции изменений.
Учет версий ведется автоматически: информация о выполненных миграциях сохраняется в БД в специальной таблице. Имея сборку с миграциями, в которых реализованы методы Apply
и Revert
, можно обновить БД любой версии до любой другой версии (как выше, так и ниже текущей).
В отличие от миграций EntityFramework, ThinkingHome.Migrator может вести в одной БД учет версий для нескольких независимых приложений. Например, это может быть полезно, если вы пишете модульное приложение, каждый модуль которого имеет собственную структуру БД и может независимо обновляться.
ThinkingHome.Migrator предоставляет одинаковый API для управления разными СУБД. При запуске миграций нужно указать название провайдера трансформации, который будет генерировать SQL запросы для нужной СУБД.
В проекте ThinkingHome.Migrator уже реализованы провайдеры для MS SQL Server, PostgreSQL, Oracle, MySQL, SQLite. Вы можете реализовать свой провайдер для любой нужной СУБД.