2

FluentMigrator でデフォルトの移行規則をオーバーライドする適切な場所はどこですか? ランナーで実行する必要がありますか、それとも移行内で実行する必要がありますか? それとも他の場所ですか?

具体的には、インデックスの命名規則を変更して、ServiceStack で使用されているものと一致させたいと考えています (例: IX_Foo_Bar=> uidx_foo_bar)。

プロパティを持つメソッドMigrationBase.ApplyConventions(IMigrationContext )が表示されます...移行内で独自のメソッドを作成する必要がありますか? すべての移行で同じ規則を使用したい場合はどうすればよいですか?IMigrationContextIMigrationConventionsMigrationContext

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 に答える