コード例 #1
0
        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()}.");
        }
コード例 #2
0
        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}\".");
                    }
                }
            }
        }