Миграция FluentMigrator выполнена успешно, но без изменений в БД - PullRequest
9 голосов
/ 16 ноября 2010

Я, должно быть, упускаю что-то довольно простое.

Я работаю над устаревшим проектом и пытаюсь 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

Однако, когда я смотрю на базу данных, она все еще пуста. Абсолютно ничего там нет. Метод My 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, прежде чем обнаружил, что он мертв, и это был уже настроен.)

Кто-нибудь может мне помочь? Похоже, транзакция не фиксация или какой-либо параметр командной строки, чтобы миграция выполняла бег включен, но я его не вижу ...

РЕДАКТИРОВАТЬ: дополнительные вещи, которые я пробовал

Чтобы подтвердить, что строка подключения использовала базу данных, которую я ожидаю, я переименовал базу данных и впоследствии получил ошибку входа в систему, как и ожидалось.

Для дальнейших тестов я сократил длину скрипта и попытался выполнить его, используя

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.

Ответы [ 2 ]

19 голосов
/ 19 ноября 2010

После некоторого исследования и тестирования с версиями 0.8 и 1.0, похоже, что это ошибка в FluentMigrator.Net, связанная с управлением транзакциями бегуна миграции - если вы запускаете миграцию с определенным номером версии, фиксация транзакции никогда не вызывается ; если вы не указали номер версии, это нормально.

EDIT:

С тех пор я отправил исправление в проект, который был принят. Это больше не проблема.

16 голосов
/ 11 января 2014

Это звучит действительно глупо, но я потратил на это несколько часов, поэтому он принадлежит вот этому:

Убедитесь, что ваши классы миграции используют публичную видимость., ваши миграции будут полностью игнорироваться.

...