如何使用FluentMigrator运行配置文件迁移?

时间:2013-06-14 00:24:16

标签: c# fluent-migrator

我正在使用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();

但是我没有接近,有没有人知道如何使用跑步者执行个人资料迁移?

2 个答案:

答案 0 :(得分:4)

尝试在迁移上下文中设置配置文件,然后传递给迁移运行器,如下所示:

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

配置文件加载器方法FindProfilesIn仅返回包含配置文件的迁移。 RunnerContext的构造函数加载ProfileLoader,默认情况下会在上下文中加载指定配置文件的迁移(我认为这默认为null,因此没有配置文件迁移)。

您不需要手动调用ApplyProfiles方法,因为MigrateUp(bool)方法会调用此方法。

答案 1 :(得分:1)

供以后阅读并使用进程中的迁移器的人们使用in the docs here。在这种情况下,指定配置文件名称的方法是在ServiceCollection上添加另一个Configure调用,如下所示:

            .Configure<RunnerOptions>(cfg =>
            {
                cfg.Profile = "DevMigration";
            })