using Microsoft.EntityFrameworkCore; using Waaagh.Models; using Waaagh.Services.Abstract; namespace Waaagh.Services { internal class ScenarioManager: IScenarioManager { private readonly IDbContextFactory AppDatabaseContextFactory; public ScenarioManager(IDbContextFactory dbContextFactory) { AppDatabaseContextFactory = dbContextFactory; using AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext(); foreach (Scenario scenario in dbContext.Scenarios) { } } private Dictionary Scenarios { get; } #region IScenarioManager public bool AddScenario(Scenario scenario) { string name = scenario.Name; if (Scenarios.TryAdd(name, scenario) == false) { Scenarios[name].UpdateReferences(scenario); } return true; } public bool TryAddScenario(Scenario scenario) { string name = scenario.Name; return Scenarios.TryAdd(name, scenario); } public bool RemoveScenario(string name) { return Scenarios.Remove(name); } public int SaveAll() { int count = 0; AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext(); int toSaveIndex = 0; List toSaveList = Scenarios.Values.ToList(); foreach (Scenario scenario in dbContext.Scenarios) { while (toSaveList[toSaveIndex].IsLegacy == true) { ++toSaveIndex; } Scenario toSaveScenario = toSaveList[toSaveIndex]; if (toSaveScenario.Id == scenario.Id) { // Update } else { // Insert } } dbContext.SaveChanges(); return count; } public int ReloadAll() { int legacyCount = 0; foreach (Scenario scenario in Scenarios.Values) { scenario.IsLegacy = true; ++legacyCount; } AppDatabaseContext dbContext = AppDatabaseContextFactory.CreateDbContext(); foreach (Scenario scenario in dbContext.Scenarios) { scenario.IsLegacy = false; string name = scenario.Name; if (Scenarios.ContainsKey(name) == true) { Scenarios[name].UpdateReferences(scenario); } else { Scenarios.Add(name, scenario); } } return Scenarios.Count() - legacyCount; } #endregion } }