在FluentMigrator中覆盖默认迁移约定的适当位置在哪里?是应该与跑步者一起完成还是在迁移中?还是其他地方?
具体来说,我想更改索引命名约定以匹配ServiceStack使用的约定(例如IX_Foo_Bar
=> uidx_foo_bar
)。
我看到方法MigrationBase.ApplyConventions(IMigrationContext )
其中IMigrationContext
有IMigrationConventions
属性...我应该在迁移中创建自己的MigrationContext
吗?如果我希望所有迁移都使用相同的约定怎么办?
答案 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_");
}
}