Должно быть, я упускаю что-то довольно простое.
Я работаю над устаревшим проектом и пытаюсь добавить FluentMigrator в микс, потому что у меня есть некоторые интересные изменения в базе данных и предстоящие миграции данных, которые, я думаю, будут намного проще с помощью этого инструмента.
Для начальной миграции я просто хочу довести базу данных до текущей производственной версии, как есть. Чтобы упростить первоначальную миграцию, я написал сценарий для своей базы данных SQL Server 2008, и миграция выполняет команды сценария в виде последовательности команд SQL.
Чтобы проверить это, я создаю совершенно пустую базу данных и пытаюсь запустить ее из командной строки, используя это:
> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll"
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName;
Integrated Security=SSPI" -version=20100901000000
Указанная версия является отметкой времени в атрибуте Migration первого класса миграции.
В командной строке кажется, что все работает нормально — весь скрипт прокручивается и заканчивается:
-- CreateProductionDbCircaSep2010: migrated
Однако, когда я смотрю на базу данных, она все еще пуста. Там абсолютно ничего нет. Мой метод Up выглядит так:
public override void Up()
{
var cmds = LoadEmbeddedResources
.GetEmbeddedResource("scripted_db_2010-09-01.sql")
.AsString()
.ParseCommands();
foreach (var c in cmds) {
Execute.Sql(c);
}
CreateReferenceData();
}
(К вашему сведению, я анализирую сценарий вместо того, чтобы запускать его как есть, потому что я начал с использования Migrator.Net, прежде чем обнаружил, что он мертв, и он уже настроен.)
Может ли кто-нибудь дать мне руку? Похоже, что транзакция не фиксируется, или включена какая-то опция командной строки для пробного выполнения миграции, но я этого не вижу...
EDIT: Дополнительные вещи, которые я пробовал
Чтобы подтвердить, что строка подключения использовала базу данных, которую я ожидаю, я переименовал базу данных и впоследствии получил ошибку входа в систему, как и ожидалось.
Для дальнейших тестов я сократил длину скрипта и попытался выполнить его с помощью
public override void Up()
{
Execute.Script(@"..\Resources\test.sql");
}
вместо команды за командой, но я получаю те же результаты. Вот результат этого теста (обратите внимание, я редактировал пути и т. д.):
C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000
0
Using Database SqlServer2008 and Connection String Data Source=.\SQLEXPRESS2008;
Initial Catalog=myNewDbName;Integrated Security=SSPI
-- VersionMigration: migrating ===============================================
-- CreateTable VersionInfo
-- VersionMigration: migrated
-- CreateProductionDbCircaSep2010: migrating =================================
-- ExecuteSqlScript C:\My\Project\Path\FluentMigrator.Net\..\Resources\test.sql
-- CreateProductionDbCircaSep2010: migrated
Но в базе данных нет таблиц - нет даже ожидаемой таблицы VersionInfo.