2014-10-14 2 views
1

Я использую Fluent Migrator для обновления базы данных. Функции Up и Down работают отлично. Следующим шагом является создание представлений. Это я хотел бы запустить из. SQL-файла, который у меня есть. Я хочу, чтобы это запускалось после того, как все миграции были запущены каждый раз.FluentMigrator Versioning Refresh Views

То, что я в настоящее время:

var blah = new MigrationConventions(); 
var maintenanceLoader = new MaintenanceLoader(_migrate, blah); 
maintenanceLoader.ApplyMaintenance(MigrationStage.AfterAll); 

и класс

[Maintenance(MigrationStage.AfterAll)] 
public class ViewMaintenance 
{ 
    public ViewMaintenance() { 
     var blah = 123; 
    } 
} 

Это не уволен, потому что в maintenanceLoader есть 0 элементы, которые можно найти. Я вставив _migrate, который определяется следующим образом:

var runnerContext = new RunnerContext(new TextWriterAnnouncer(UpdateText)); 
_migrate = new MigrationRunner(
Assembly.GetExecutingAssembly(), 
runnerContext, 
    new SqlServerProcessor(
    new SqlConnection(connectionString), 
    new SqlServer2012Generator(), 
    new TextWriterAnnouncer(UpdateText), 
    new ProcessorOptions(), 
    new SqlServerDbFactory())); 

Почему не может быть отсканированные Assembly.GetExecutingAssembly() и найти [Maintenance(MigrationStage.AfterAll)] можно найти?

Мне также хотелось бы, чтобы класс ViewMaintenance мог запускать Execute.Sql(, что и классы миграции.

ответ

0

Я загрузил исходный код и понял его.

В классе я хочу, чтобы обслуживание было запущено, мне нужно наследовать от класса : Migration, как с миграциями (duh ..). Затем он будет иметь доступ ко всему, к чему у него есть доступ при миграции, включая Execute.Sql(.

Когда он наследуется, Reflection in Fluent Migrator будет искать его, находить и использовать атрибут, который будет запущен после запуска всех миграций.

Эта часть не требуется:

var blah = new MigrationConventions(); 
var maintenanceLoader = new MaintenanceLoader(_migrate, blah); 
maintenanceLoader.ApplyMaintenance(MigrationStage.AfterAll); 

Аккуратные :)

Смежные вопросы