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



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



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



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


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

821   5  

5 ответов:

Поскольку fluent migrator является развилкой Migrator .NET, вы можете найти начало работы для Migrator .net полезным

Один из оригинальных авторов FluentMigrator только что написал этот блог "начало работы" .

Я списал это из их исходного кода...

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. Target-это имя сборки, которую вы хотите выполнить. В вашем случае это будет любая сборка, созданная вашим проектом миграции. В IRunnerContext можно задать и другие параметры. Например, пространство имен, PreviewOnly и т. д. К сожалению, это не задокументировано, поэтому вам придется копаться в коде, чтобы понять это. Проект, который генерирует миграцию.exe ассамблея-вот где я нашел большую часть этого.

Вот пример того, как это делается в C# (а не в MSBuild, Nant или Console runner), основанный на обрывках 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");
    }
}

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

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

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

Comments

    Ничего не найдено.