private List <SqlBatchScript> ApplyChangesToDatabase_Unchanged(List <ConceptApplication> toBeInserted, List <ConceptApplication> newApplications, List <ConceptApplication> oldApplications)
        {
            var newScripts = new List <SqlBatchScript>();

            var indexInsertedConcepts = new HashSet <string>(toBeInserted.Select(ca => ca.GetConceptApplicationKey()));
            var unchangedApplications = newApplications
                                        .Where(ca => !indexInsertedConcepts.Contains(ca.GetConceptApplicationKey()));

            var oldApplicationsByKey = oldApplications.ToDictionary(oa => oa.GetConceptApplicationKey());

            foreach (var ca in unchangedApplications)
            {
                var updateMetadataSql = _sqlTransactionBatches.JoinScripts(_conceptApplicationRepository.UpdateMetadataSql(ca, oldApplicationsByKey[ca.GetConceptApplicationKey()]));

                if (updateMetadataSql.Any())
                {
                    LogDatabaseChanges(ca, "Updating metadata");
                    newScripts.AddRange(updateMetadataSql
                                        .Select((sql, x) => new SqlBatchScript {
                        Sql = sql, IsBatch = false, Name = $"Updating {ca} metadata ({x + 1})."
                    }));
                }
            }

            return(newScripts);
        }
예제 #2
0
        protected List <string> ApplyChangesToDatabase_Unchanged(List <NewConceptApplication> toBeInserted, List <NewConceptApplication> newApplications, List <ConceptApplication> oldApplications)
        {
            var newScripts = new List <string>();

            var indexInsertedConcepts = new HashSet <string>(toBeInserted.Select(ca => ca.GetConceptApplicationKey()));
            var unchangedApplications = newApplications
                                        .Where(ca => !indexInsertedConcepts.Contains(ca.GetConceptApplicationKey()));

            var oldApplicationsByKey = oldApplications.ToDictionary(oa => oa.GetConceptApplicationKey());

            foreach (var ca in unchangedApplications)
            {
                var updateMetadataSql = _sqlTransactionBatches.JoinScripts(_conceptApplicationRepository.UpdateMetadataSql(ca, oldApplicationsByKey[ca.GetConceptApplicationKey()]));
                if (updateMetadataSql.Count() > 0)
                {
                    LogDatabaseChanges(ca, "Updating metadata");
                    newScripts.AddRange(updateMetadataSql);
                }
            }

            return(newScripts);
        }