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?