private void MigrateTo(int migration) { var migrations = _migration_provider.GetMigrations(); int current = _migration_provider.DatabaseMigrationNumber(); if (migrations.Count < current) { current = migrations.Count; } if (migration > migrations.Max(m => m.Key) || migration < 0) { Console.WriteLine("Invalid Migration"); return; } if (migration == current) { Console.WriteLine("Nothing to be done."); return; } while (current < migration) { // go Up KeyValuePair <string, string> migration_kvp = _migration_provider.GetMigrationWithContents(++current); string migration_json = migration_kvp.Value; dynamic migration_object = Helpers.DeserializeMigration(migration_json); Console.WriteLine("Executing " + current + ". Executing Migration " + migration_kvp.Key); _database_provider.ExecuteUpCommand(migration_object); _database_provider.UpdateMigrationVersion(current); } while (current > migration && current > 0) { // go down KeyValuePair <string, string> migration_kvp = _migration_provider.GetMigrationWithContents(current); string migration_json = migration_kvp.Value; dynamic migration_object = Helpers.DeserializeMigration(migration_json); Console.WriteLine("Removing " + (current) + ". Executing Migration " + migration_kvp.Key); _database_provider.ExecuteDownCommand(migration_object); _database_provider.UpdateMigrationVersion(--current); } }