I have a lot (around a thousand) of FluentMigrator Migration classes that started timing out on our build server.
For those who haven't worked with FluentMigrator - Migrations are working in such way that all your migrations inherit from Migration class that has Up() and Down() methods that run SQL scripts for db migrations - simple and easy.
Now being lazy I have introduced a LoggingMigration class that logs the time when migration starts running (and simply replaced : Migration to : LoggingMigration in VS for that project).
public class LoggingMigration : Migration
{
public DateTime StartTime { get; private set; }
public LoggingMigration()
{
this.StartTime = DateTime.Now;
Console.WriteLine("Start {0} - TIME: {1:yyyy-MM-dd HH:mm:ss.fff}", this.GetType().Name, StartTime);
}
public override void Up()
{
}
public override void Down()
{
}
}
I want to also do a time on how long migration was running to make it easier to see which migrations take long.
I was thinking of using destructor like:
~LoggingMigration()
{
Console.WriteLine("End(?) {0} - TIME: {1}", this.GetType().Name, DateTime.Now.Subtract(StartTime));
}
but thing is just to volatile and unpredictable
How to add mechanism that would run after Up() method in child class finishes?
Or some other way that does the job?