public void Up(MigrationDescriptor descriptor) { log.Debug("Run up migration", descriptor); try { using (var session = DocumentStore.OpenSession()) { descriptor.Status = MigrationStatus.Installing; session.Store(descriptor); session.SaveChanges(); } IMigration migration; if (TryCreateMigrationInstance(descriptor, out migration)) { migration.Up(); } using (var session = DocumentStore.OpenSession()) { descriptor.Status = MigrationStatus.Installed; session.Store(descriptor); session.SaveChanges(); } } catch (Exception e) { log.ErrorException("Error runing up migration", e); using (var session = DocumentStore.OpenSession()) { descriptor.Messages.Add(new MigrationMessage(MigrationActionType.Up, e)); session.Store(descriptor); session.SaveChanges(); } } }
private bool TryCreateMigrationInstance(MigrationDescriptor descriptor, out IMigration migration) { migration = null; var result = descriptor.MigrationTypeFullName != null && (migration = Activator.CreateInstance(MigrationsAssembly.FullName, descriptor.MigrationTypeFullName).Unwrap() as IMigration) != null; if (result) { migration.DocumentStore = DocumentStore; } return(result); }
private static MigrationDescriptor GetDescriptorWithUpdatedStatus(string key, Dictionary <string, MigrationDescriptor> validMigrations, Dictionary <string, MigrationDescriptor> installedMigrations) { MigrationDescriptor auxValid = null; MigrationDescriptor auxInstalled = null; if (!validMigrations.TryGetValue(key, out auxValid)) { auxInstalled = installedMigrations[key]; auxInstalled.Status = MigrationStatus.InstalledObsolete; } else if (installedMigrations.TryGetValue(key, out auxInstalled)) { auxValid.Status = auxInstalled.Status; auxValid.Messages = auxInstalled.Messages; } return(auxValid ?? auxInstalled); }
public void Down(MigrationDescriptor descriptor) { log.Debug("Run down migration", descriptor); try { using (var session = DocumentStore.OpenSession()) { descriptor.Status = MigrationStatus.Uninstalling; session.Store(descriptor); session.SaveChanges(); } IMigration migration; if (TryCreateMigrationInstance(descriptor, out migration)) { migration.Down(); } using (var session = DocumentStore.OpenSession()) { var stored = session.Load <MigrationDescriptor>(descriptor.Id); if (stored != null) { session.Delete(stored); session.SaveChanges(); } } } catch (Exception e) { log.ErrorException("Error runing down migration", e); using (var session = DocumentStore.OpenSession()) { descriptor.Messages.Add(new MigrationMessage(MigrationActionType.Down, e)); session.Store(descriptor); session.SaveChanges(); } } }