Миграция FluentMigrator прошла успешно, но без изменений в БД

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

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


person Remi Despres-Smyth    schedule 16.11.2010    source источник


Ответы (3)


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

РЕДАКТИРОВАТЬ:

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

person Remi Despres-Smyth    schedule 19.11.2010
comment
Я собираюсь попробовать собрать патч для проекта, когда у меня будет время. - person Remi Despres-Smyth; 19.11.2010

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

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

Без этого ваши миграции будут полностью проигнорированы.

person ashes999    schedule 10.01.2014
comment
СПАСИБО! Это меня полностью спасло. - person Jesse Carter; 15.04.2015

Я обнаружил, что если ваша строка dbconnection равна нулю, то же самое произойдет. Неверная строка базы данных: сбой, теги миграции не найдены: сбой.. но пустая строка базы данных.. ничего не делать, кроме как просмотреть и сообщить, что миграции сработали. Имейте в виду.

person Dale Holborow    schedule 23.04.2020
comment
Это была и моя проблема. Моя строка подключения была нулевой, но ошибок не было. Fluent migrator сказал, что все хорошо, вместо того, чтобы выдать ошибку нулевой строки подключения.... - person Andrei Ciocan; 26.08.2020