Подтвердить что ты не робот

Выполнять миграцию FluentMigrator из кода

Есть ли какие-либо учебники или примеры кода для выполнения миграции FluentMigrator из кода? Некоторое руководство "Начало работы..." было бы просто потрясающе. Все, что мне удалось найти, это FluentMigrator.Tests (модульные тесты), внутри FluentMigrator источника, которые не так полезны, как "Начало работы...".

Я просто хочу добавить несколько классов в проект и выполнить миграции из этого проекта без внешних инструментов. Возможно ли это в Fluent Migrator? Что-то вроде

FluentMigrator.Migrate("database path", typeof(Migration024));

который я бы назвал из Program.Main()?

4b9b3361

Ответ 1

Так как плавный мигратор является вилкой Migrator.NET, вы можете найти начало для Migrator.net полезно

Ответ 3

Я вырезал это из своего исходного кода...

using (IAnnouncer announcer = new TextWriterAnnouncer(Console.Out))
{
   IRunnerContext migrationContext = new RunnerContext(announcer) 
   { 
      Connection = "Data Source=test.db;Version=3", 
      Database = "sqlite", 
      Target = "migrations" 
   };

   TaskExecutor executor = new TaskExecutor(migrationContext);
   executor.Execute();
}

Я использую код, аналогичный этому в пользовательском классе действий в WiX. Цель - это имя сборки, которую вы хотите выполнить. В вашем случае это будет любая сборка, созданная вашим проектом миграции. В IRUNnerContext есть другие варианты, которые вы можете установить. Как пространство имен, PreviewOnly и т.д. К сожалению, это не документировано, поэтому вам придется вникнуть в код, чтобы понять это. Проект, который создает сборку Migrate.exe, где я нашел большую часть этого.

Ответ 4

Вот пример выполнения этого в С# (а не MSBuild, Nant или консольного бегуна) на основе обрезков в Stackoverflow:

static void Main(string[] args)
{
    string connectionString = @"server=.\SQLEXPRESS;database=testdb;uid=sa2;pwd=Passw0rd";
    Announcer announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s));
    announcer.ShowSql = true;

    Assembly assembly = Assembly.GetExecutingAssembly();
    IRunnerContext migrationContext = new RunnerContext(announcer);

    var options = new ProcessorOptions 
    { 
        PreviewOnly = false,  // set to true to see the SQL
        Timeout = 60 
    };
    var factory = new SqlServer2008ProcessorFactory();
    using (IMigrationProcessor processor = factory.Create(connectionString, announcer, options))
    {
        var runner = new MigrationRunner(assembly, migrationContext, processor);
        runner.MigrateUp(true);

        // Or go back down
        //runner.MigrateDown(0);
    }
}

[Migration(1)]
public class CreateUserTable : Migration
{
    public override void Up()
    {
        Create.Table("person")
            .WithColumn("Id").AsGuid().PrimaryKey()
            .WithColumn("Name").AsString();
    }

    public override void Down()
    {
        Delete.Table("person");
    }
}

У вас возникнут проблемы с С# с TaskExecutor, поскольку этот класс предназначен только для консольного приложения (migrate.exe).

Ответ 5

Этот учебник был полезен для меня, чтобы выяснить, как создавать и использовать FluentMigrator с MSBuild, если вы используете визуальные студии.

Также идет пример резервного копирования и восстановления базы данных.