Я ввел этот класс, который контролирует, с какими базами данных он должен работать. Так, а при наследовании от Migration
вы теперь наследуют от OnlyRunOnSpecificDatabaseMigration
:
Одно замечание !: Это Откат на поведение по умолчанию (для запуска миграции), если нет, перечисленных в DatabaseNamesToRunMigrationOnList
баз данных - которые некоторые могут найти нелогичным
namespace Infrastructure.Migrations
{
using System.Collections.Generic;
using FluentMigrator;
using FluentMigrator.Infrastructure;
public abstract class OnlyRunOnSpecificDatabaseMigration : Migration
{
public abstract List<string> DatabaseNamesToRunMigrationOnList { get; }
private bool DoRunMigraton(IMigrationContext context)
{
return this.DatabaseNamesToRunMigrationOnList == null ||
this.DatabaseNamesToRunMigrationOnList.Contains(new System.Data.SqlClient.SqlConnectionStringBuilder(context.Connection).InitialCatalog);
}
public override void GetUpExpressions(IMigrationContext context)
{
if (this.DoRunMigraton(context))
{
base.GetUpExpressions(context);
}
}
public override void GetDownExpressions(IMigrationContext context)
{
if (this.DoRunMigraton(context))
{
base.GetDownExpressions(context);
}
}
}
}
пример использования:
public class RiskItems : OnlyRunOnSpecificDatabaseMigration
{
public override void Up()
{
Execute.Sql(@"update [Items] set
CanBeX =
case when exists(select 1 from [SomeTable] where Key = [Items].Key and position like 'Factor%') then 1 else 0 end");
}
public override void Down()
{
}
public override List<string> DatabaseNamesToRunMigrationOnList
{
get
{
return new List<string> {"my_database_name"};
}
}
}
Это Q/A спас меня много времени, и я хочу это получить больше upvotes. Возможно, добавьте некоторый контекст, например: «FM запускает все миграции, которые он может найти в данной DLL», «атрибуты тега полезны для определенных миграций, но их цель, разумеется, не будет широко распространена» и «документация рассказывает вам, как настроить таргетинг на разные СУБД, но нет ничего о разных БД », поэтому ясно, что документация анемична, в отличие от того, что вы не сделали правильный поиск, прежде чем спрашивать. –
@RenaudGauthier Привет Рено, причина, по которой этот Q не получает upvotes, не формулируется (название соответствует тому, что находится в ответе), но вопрос - очень ниша, просто посмотрите на взгляды ... также мне все равно TBH .. Помогать людям в этом не очень полезно, поэтому я «вышел на пенсию». –