Мне, должно быть, не хватает чего-то очень простого.
Я работаю над устаревшим проектом и пытаюсь 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
Указанная версия является отметкой времени на первом классе миграции Атрибут миграции.
В командной строке все работает нормально - все Скрипт приближается и заканчивается на:
-- 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 до того, как обнаружил, что он мертв, и это уже был настроен.)
Кто-нибудь может мне помочь? Это почти похоже на то, что транзакция не фиксации или какой-либо параметр командной строки, чтобы миграция выполнялась сухим run включен, но я его не вижу ...
РЕДАКТИРОВАТЬ: Дополнительные вещи, которые я пробовал
Чтобы убедиться, что строка подключения использует базу данных, которую я ожидал, я переименовал базу данных, а затем произошла ошибка входа в систему, как и ожидалось.
Для дальнейших тестов я сократил длину скрипта и попытался выполнить его, используя
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.