Как выполнить миграцию профиля с помощью FluentMigrator?

Я использую FluentMigrator для управления изменениями в моей базе данных, я выполняю свои миграции следующим образом:

const string connectionString = @"Data Source=localhost, 1433;Initial Catalog=testdb;Integrated Security=SSPI;";
            Announcer announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s));
            announcer.ShowSql = true;

            Assembly assembly = Assembly.GetAssembly(typeof (MigrationMarker));
            IRunnerContext migrationContext = new RunnerContext(announcer);

            var options = new ProcessorOptions
                              {
                                  PreviewOnly = false, // set to true to see the SQL
                                  Timeout = 60
                              };

            var factory = new SqlServer2008ProcessorFactory();
            IMigrationProcessor processor = factory.Create(connectionString, announcer, options);
            var runner = new MigrationRunner(assembly, migrationContext, processor);

            runner.MigrateUp(true);

Однако я не могу понять, как выполнить миграцию для определенного профиля?

Итак, учитывая, что мой миграционный объект имеет такой атрибут:

[Profile("DevMigration")]
public class DevMigration : FluentMigrator.Migration
{

Я пробовал несколько вариантов:

runner.ProfileLoader.FindProfilesIn(assembly, "DevMigrator");
runner.ApplyProfiles();

Но я не приближаюсь, кто-нибудь знает, как я могу выполнить миграцию профиля с помощью бегуна?


person shenku    schedule 14.06.2013    source источник


Ответы (2)


Попробуйте настроить профили в контексте миграции, прежде чем они будут переданы исполнителю миграции следующим образом:

IRunnerContext migrationContext = new RunnerContext(announcer);
migrationContext.Profile = "DevMigrator"

Метод загрузчика профиля FindProfilesIn возвращает только миграции с профилем. Конструктор RunnerContext загружает ProfileLoader, который по умолчанию загружает миграции для указанного профиля в контексте (я думаю, что по умолчанию это значение равно null, поэтому миграция профиля отсутствует).

Вам не нужно вручную вызывать метод ApplyProfiles, поскольку он вызывается в методе MigrateUp(bool).

person boniestlawyer    schedule 14.06.2013

Для тех, кто читает его намного позже и использует встроенный миграционный модуль, как показано в документах здесь. Способ указать имя профиля в этом случае — добавить еще один вызов Configure в ServiceCollection следующим образом:

            .Configure<RunnerOptions>(cfg =>
            {
                cfg.Profile = "DevMigration";
            })
person Stas Ivanov    schedule 05.06.2019