2

在 FluentMigrator 中覆盖默认迁移约定的合适位置在哪里?应该与跑步者一起完成,还是在迁移中完成?还是别处?

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

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

4

1 回答 1

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_");
    }
}
于 2014-11-20T13:43:31.533 回答