使用FluentMigrator更改约定

时间:2014-02-24 18:40:19

标签: c# fluent-migrator

在FluentMigrator中覆盖默认迁移约定的适当位置在哪里?是应该与跑步者一起完成还是在迁移中?还是其他地方?

具体来说,我想更改索引命名约定以匹配ServiceStack使用的约定(例如IX_Foo_Bar => uidx_foo_bar)。

我看到方法MigrationBase.ApplyConventions(IMigrationContext )其中IMigrationContextIMigrationConventions属性...我应该在迁移中创建自己的MigrationContext吗?如果我希望所有迁移都使用相同的约定怎么办?

1 个答案:

答案 0 :(得分:3)

这是我发现更改约定的唯一方法。您需要创建一个扩展“FluentMigrator.Migration”的抽象类来更改其约定。然后,您的所有迁移类都应该扩展此类而不是FluentMigrator.Migration。

public abstract class BaseMigration : Migration
{
    // Update conventions for up migration
    public override void GetUpExpressions(IMigrationContext context)
    {
        this.UpdateConventions(context);
        base.GetUpExpressions(context);
    }

    // Update conventions for down migration
    public override void GetDownExpressions(IMigrationContext context)
    {
        this.UpdateConventions(context);
        base.GetDownExpressions(context);
    }

    // Change the conventions
    public void UpdateConventions(IMigrationContext context)
    {
        var conventions = ((MigrationConventions)context.Conventions);
        conventions.GetIndexName = index => DefaultMigrationConventions.GetIndexName(index).Replace("IX_", "uidx_");
    }
}