From 9f79b001c480e5ca40241d31ea6b4bc18b9a516f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:56:50 +0000 Subject: [PATCH 1/4] Initial plan From 59c908e13e8ffb9b5c15ed92e8c1b9980cd57ca8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:02:19 +0000 Subject: [PATCH 2/4] Optimize project metadata startup update path --- PPMTool/Services/ProjectService.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/PPMTool/Services/ProjectService.cs b/PPMTool/Services/ProjectService.cs index 26794207..63880b3a 100644 --- a/PPMTool/Services/ProjectService.cs +++ b/PPMTool/Services/ProjectService.cs @@ -232,7 +232,19 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) var prefix = settingsService.GetSetting(SettingType.ProjectAbbreviation, string.Empty); var indirects = settingsService.GetSetting(SettingType.BAUTopSliceFractionDefault, 0f); var finrefs = financialReferenceService.GetAll(context).ToList(); - var projects = GetAll(context); + var projects = context.Projects + .Include(p => p.School) + .ThenInclude(s => s.Faculty) + .Include(p => p.SubTasks) + .ThenInclude(s => s.AssignedResources) + .ThenInclude(r => r.Person) + .ThenInclude(r => r.WorkloadModelChanges) + .Include(p => p.SubTasks) + .ThenInclude(s => s.AssignedResources) + .ThenInclude(r => r.FundedFrom) + .Include(p => p.ProjectManager) + .Include(p => p.FundingSources) + .ToList(); foreach (var project in projects) { try @@ -242,7 +254,6 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) finrefs, indirects ); - Update(context, project); logger.LogInformation($"Updated project metadata for project {project.ProjectId} ({prefix}-{project.RTP})"); } catch (Exception ex) @@ -250,6 +261,7 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) logger.LogWarning(ex, $"Error occurred while updating project metadata for project {project.ProjectId} ({prefix}-{project.RTP}): {ex.Message}"); } } + CommitChanges(context); } } } From 2d75373b036b8018384facd719119705cdb8d26d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:07:35 +0000 Subject: [PATCH 3/4] Improve project metadata refresh efficiency at startup --- PPMTool/Services/ProjectService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PPMTool/Services/ProjectService.cs b/PPMTool/Services/ProjectService.cs index 63880b3a..34246feb 100644 --- a/PPMTool/Services/ProjectService.cs +++ b/PPMTool/Services/ProjectService.cs @@ -254,6 +254,7 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) finrefs, indirects ); + CommitChanges(context); logger.LogInformation($"Updated project metadata for project {project.ProjectId} ({prefix}-{project.RTP})"); } catch (Exception ex) @@ -261,7 +262,6 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) logger.LogWarning(ex, $"Error occurred while updating project metadata for project {project.ProjectId} ({prefix}-{project.RTP}): {ex.Message}"); } } - CommitChanges(context); } } } From de210c37f396dd2d7fd93ff4aef258898bb0a226 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:14:55 +0000 Subject: [PATCH 4/4] Trim metadata refresh includes to required minimum --- PPMTool/Services/ProjectService.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/PPMTool/Services/ProjectService.cs b/PPMTool/Services/ProjectService.cs index 34246feb..27bbcec9 100644 --- a/PPMTool/Services/ProjectService.cs +++ b/PPMTool/Services/ProjectService.cs @@ -233,16 +233,10 @@ internal void UpdateAllProjectMetaData(PPMToolContext context) var indirects = settingsService.GetSetting(SettingType.BAUTopSliceFractionDefault, 0f); var finrefs = financialReferenceService.GetAll(context).ToList(); var projects = context.Projects - .Include(p => p.School) - .ThenInclude(s => s.Faculty) .Include(p => p.SubTasks) .ThenInclude(s => s.AssignedResources) .ThenInclude(r => r.Person) .ThenInclude(r => r.WorkloadModelChanges) - .Include(p => p.SubTasks) - .ThenInclude(s => s.AssignedResources) - .ThenInclude(r => r.FundedFrom) - .Include(p => p.ProjectManager) .Include(p => p.FundingSources) .ToList(); foreach (var project in projects)