ECM7 Migrator - система контроля версий базы данных для .NET, похожая на Ruby on Rail's Migrations. Цель - облегчить внесение изменений в БД и обеспечить контроль версий БД.
Данный проект является веткой проекта Migrator.NET.
- MySQL 5.0 и выше;
- Oracle 10g и выше;
- SQLite 3 и выше;
- MS SQL Server 2005 и выше;
- MS SQL Server Ce 4.
- SQL Azure;
- PostgreSQL 9 и выше;
- Firebird 2.5 и выше;
- MSBuildTarget;
- NAntTask;
- консольное приложение;
- API.
Документация не обновлена, мы работаем над этим.
- Обзор ECM7.Migrator;
- Начало работы;
- Написание классов "миграций";
- Выполнение "миграций";
- Использование с различными СУБД;
- Как собрать проект из исходного кода;
- удалена зависимость от библиотеки ECM7.Common.dll;
- переход с log4net на NLog;
- теперь по умолчанию используются 64-битные версии библиотек System.Data.SQLite.dll и Oracle.DataAccess.dll;
- рефакторинг и исправление мелких ошибок;
- сборки подписаны строгим именем;
- возможность задавать timeout для команды;
- возможность выполнять миграции без открытия транзакции;
- Добавлена возможность работы со схемами БД, отличными от схемы по умолчанию;
- Более корректное формирование человекочитаемых имен классов миграций;
- Из интерфейса ITransformationProvider удален метод AddTable, принимающий параметр engine (данный параметр использовался только в провайдере MySql);
Изменения провайдеров
- Полностью переписаны классы всех провайдеров;
- Полностью переписаны классы тестов для провайдеров:
- один общий провайдер для MSSQL 2005, MSSQL 2008 и SQL Azure;
- поддержка Firebird;
- обработка разделителей запросов (например, "GO" для MSSQL);
- более корректная реализация методов изменения колонок;
- SQLite: добавлена поддержка индексов;
- из интерфейса ITransformationProvider удалены все варианты метода AddColumn, которые внутри себя создают Column и вызывают свою перегруженную версию;
- метод ExecuteQuery переименован в ExecuteReader;
- из интерфейса ITransformationProvider удалены методы GetColumnByName, GetColumns;
Общие изменения
- теперь Migrator может принимать в конструкторе экземпляр подключения (это будет полезно, например, при запуске тестов на SQLite в памяти);
- ITransformationProvider и Migrator теперь реализуют интерфейс IDisposable (все миграции выполняются в одном подключении, а в методе Dispose оно закрывается);
- класс Dialect объединен с классом TransformationProvider;
- исправлена ошибка с сортировкой списка загруженных миграций при логировании;
- методы Up и Down переименованы в Apply и Revert;
- пустая реализация метода Revert по умолчанию (теперь не обязательно переопределять метод, откатывающий изменения);
- библиотеки NAnt обновлены до версии 0.91;
- обработка параметров командной строки через NDesk.OptionSet;
- удалены "левые" конструкторы у класса Column;
- изменен механизм выполнения действий для заданного типа провайдера;
- удалено ограничение ForeignKeyConstraint.Restrict;
- удалено свойство колонки ColumnProperty.ForeignKey.