/// <summary> /// Rolls back all migrations. /// </summary> /// <param name="plugin">The plugin.</param> public void MigrateDown(ICorePlugin plugin) { Debug.Assert(plugin != null); Assembly pluginMigrationsAssembly = plugin.GetPluginMigrationsAssembly(); if (pluginMigrationsAssembly != null) { using (ECM7.Migrator.Migrator migrator = GetMigrator(pluginMigrationsAssembly)) { if (migrator.AvailableMigrations != null && migrator.AvailableMigrations.Count > 0) { var migrationService = ServiceLocator.Current.GetInstance <IMigrationService>(); IEnumerable <Migration> pluginInstalledMigrations = FillPluginSchemaInfo(plugin, migrationService); migrator.Migrate(0); IEnumerable <long> pluginMigrations = (from migrationsType in migrator.AvailableMigrations select migrationsType.Version). AsEnumerable (); foreach (var pluginInstalledMigration in pluginInstalledMigrations) { if (pluginMigrations.Contains(pluginInstalledMigration.Version)) { migrationService.Delete(pluginInstalledMigration); } } } } } }
private ECM7.Migrator.Migrator GetMigrator(Assembly assembly) { IApplicationConfigurator applicationConfigurator = ServiceLocator.Current.GetInstance<IApplicationConfigurator>(); ECM7.Migrator.Migrator migrator = null; if (applicationConfigurator != null && applicationConfigurator.DatabaseConfiguration != null) { migrator = new ECM7.Migrator.Migrator(MigratorUtility.GetDialect(applicationConfigurator.DatabaseConfiguration.Platform), applicationConfigurator.DatabaseConfiguration.GetConnectionString(), assembly); } return migrator; }
/// <summary> /// Gets the migrator. /// </summary> /// <param name="assembly">The assembly.</param> /// <returns></returns> private static ECM7.Migrator.Migrator GetMigrator(Assembly assembly) { IApplicationConfigurator applicationConfigurator = ServiceLocator.Current.GetInstance <IApplicationConfigurator>(); ECM7.Migrator.Migrator migrator = null; if (applicationConfigurator != null && applicationConfigurator.DatabaseConfiguration != null) { migrator = new ECM7.Migrator.Migrator(MigratorUtility.GetDialect(applicationConfigurator.DatabaseConfiguration.Platform), applicationConfigurator.DatabaseConfiguration.GetConnectionString(), assembly); } return(migrator); }
/// <summary> /// Applies migrations for specified plugin. /// </summary> /// <param name="plugin">The plugin.</param> public void MigrateUp(ICorePlugin plugin) { Debug.Assert(plugin != null); Assembly pluginMigrationsAssembly = plugin.GetPluginMigrationsAssembly(); if (pluginMigrationsAssembly != null) { var migrationService = ServiceLocator.Current.GetInstance <IMigrationService>(); IEnumerable <Migration> pluginMigrations = FillPluginSchemaInfo(plugin, migrationService); using (ECM7.Migrator.Migrator migrator = GetMigrator(pluginMigrationsAssembly)) { migrator.Migrate(); IList <long> appliedMigrations = migrator.GetAppliedMigrations(); if (appliedMigrations != null && appliedMigrations.Count > 0) { IEnumerable <long> pluginMigrationsVersions = (from pluginMigration in pluginMigrations select pluginMigration.Version).AsEnumerable(); appliedMigrations.ToList().RemoveAll( migration => pluginMigrationsVersions.Contains(migration)); if (appliedMigrations.Count > 0) { var pluginService = ServiceLocator.Current.GetInstance <IPluginService>(); Plugin pluginEntity = pluginService.FindPluginByIdentifier(plugin.Identifier); foreach (long appliedMigration in appliedMigrations) { Migration migration = new Migration { Plugin = pluginEntity, Version = appliedMigration }; migrationService.Save(migration); } } } } } }