public void PerformUpOperation() { TestForLogTable(); List <IDatabaseMigration> migrations = _assemblyUtility.GetTypeFromAssembly <IDatabaseMigration>(_targetAssembly) .OrderBy(m => m.SerialNumber) .ToList(); List <EasyMigrationLog> migrationLogs = _dataService.GetMigrationLogs(_targetAssembly.ManifestModule.Name); if (migrationLogs.Count > 0) { if (migrationLogs.Last().Serial == migrations.Last().SerialNumber) { _logger.LogInformation("The database is already on the latest migration."); return; } if (migrationLogs.Last().Serial > migrations.Last().SerialNumber) { _logger.LogInformation( "The database is on a migration serial not contained in the migrations assembly. Are you using the latest build?"); return; } } var targetSerial = migrationLogs.Count > 0 ? migrationLogs.Last().Serial + 1 : 1; var targetMigration = migrations.Single(m => m.SerialNumber == targetSerial); _logger.LogDebug($"The target migration serial is {targetSerial}."); Stopwatch timer = Stopwatch.StartNew(); _sqlCommandUtility.RunEmbeddedResourceList(targetMigration.ScriptResourseListUp, _targetAssembly); timer.Stop(); _dataService.UpdateMigrationLog(targetSerial, _targetAssembly.ManifestModule.Name); _logger.LogInformation($"Up migration operation completed. Took {timer.Elapsed.ToString()}."); }
public void PerformDataGenerationOperation(string generationName) { List <IDataGenerator> scriptDataGenActions; try { scriptDataGenActions = _assemblyUtility.GetTypeFromAssembly <IDataGenerator>(_targetAssembly); } catch { scriptDataGenActions = new List <IDataGenerator>(); } List <IProgrammaticDataGenerator> programaticDataGenActions; try { programaticDataGenActions = _assemblyUtility.GetTypeFromAssembly <IProgrammaticDataGenerator>(_targetAssembly); } catch { programaticDataGenActions = new List <IProgrammaticDataGenerator>(); } List <IDataGeneratorGroup> dataGeneratorGroups; try { dataGeneratorGroups = _assemblyUtility.GetTypeFromAssembly <IDataGeneratorGroup>(_targetAssembly); } catch { dataGeneratorGroups = new List <IDataGeneratorGroup>(); } SanityCheckNaming(scriptDataGenActions, programaticDataGenActions, dataGeneratorGroups, generationName); var scriptSeach = scriptDataGenActions.SingleOrDefault(sdg => String.Equals(sdg.Name, generationName, StringComparison.CurrentCultureIgnoreCase)); var programmaticSeach = programaticDataGenActions.SingleOrDefault(pdg => String.Equals(pdg.Name, generationName, StringComparison.CurrentCultureIgnoreCase)); var groupSearch = dataGeneratorGroups.SingleOrDefault(dgg => String.Equals(dgg.Name, generationName, StringComparison.CurrentCultureIgnoreCase)); if (scriptSeach != default(IDataGenerator)) { _commandUtility.RunEmbeddedResourceList(scriptSeach.DataGenerationScripts, _targetAssembly); } if (programmaticSeach != default(IProgrammaticDataGenerator)) { _logger.LogInformation($"Starting generation function, \"{programmaticSeach.Name}\"."); programmaticSeach.GenerationRoutine(_logger); _logger.LogInformation($"Finished generation function, \"{programmaticSeach.Name}\"."); } if (groupSearch != default(IDataGeneratorGroup)) { foreach (var actionName in groupSearch.DataGenerationActionNames) { var scriptSeachGroup = scriptDataGenActions.SingleOrDefault(sdg => String.Equals(sdg.Name, actionName, StringComparison.CurrentCultureIgnoreCase)); var programmaticSeachGroup = programaticDataGenActions.SingleOrDefault(pdg => String.Equals(pdg.Name, actionName, StringComparison.CurrentCultureIgnoreCase)); if (scriptSeachGroup == default(IDataGenerator) && programmaticSeachGroup == default(IProgrammaticDataGenerator)) { throw new ApplicationException( $"The data generator group '{groupSearch.Name}' contains the action name '{actionName}' which can not be found in the targe assembly."); } if (scriptSeachGroup != default(IDataGenerator)) { _commandUtility.RunEmbeddedResourceList(scriptSeachGroup.DataGenerationScripts, _targetAssembly); } if (programmaticSeachGroup != default(IProgrammaticDataGenerator)) { _logger.LogInformation($"Starting generation function, \"{programmaticSeachGroup.Name}\"."); programmaticSeachGroup.GenerationRoutine(_logger); _logger.LogInformation($"Finished generation function, \"{programmaticSeachGroup.Name}\"."); } } } }