2014-02-24 66 views
2

FluentMigrator中適當的地方可以覆蓋默認的遷移約定嗎?是否應該與跑步者一起完成,還是在遷移過程中完成?或者其他地方使用FluentMigrator更改約定

具體而言,我想更改索引命名約定以匹配ServiceStack所使用的約定(例如,IX_Foo_Bar =>uidx_foo_bar)。

我看到方法MigrationBase.ApplyConventions(IMigrationContext)其中IMigrationContextIMigrationConventions屬性...我應該創建我自己的MigrationContext裏面的遷移嗎?如果我希望所有遷移都使用相同的約定呢?

回答

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_"); 
    } 
} 
+0

不錯。我們已經爲我們的版本控制計劃定製了一個基類,所以這並不壞。 –