public override void RemoveScenario(ScenarioBase scenario) { var linkedScenarios = _scenarios.Except(new[] { scenario }) .Where(x => x.GetAllActionsFlat() .Any(z => z is IScenariosAccess scenarioAccessObj && scenarioAccessObj.TargetScenarioId != null && scenarioAccessObj.TargetScenarioId.Equals(scenario.Id))).ToArray(); if (linkedScenarios.Any()) { throw new InvalidOperationException("Невозможно удалить сценарий, так как следующие сценарии ссылаются на него: " + linkedScenarios.Select(x => x.Name).Aggregate((z, y) => z + "; " + y)); } var linkedTriggers = _triggers .Where(x => (x.TargetScenarioId != null && x.TargetScenarioId.Equals(scenario.Id)) || x.GetAllActionsFlat() .Any(z => z is IScenariosAccess scenarioAccessObj && scenarioAccessObj.TargetScenarioId.Equals(scenario.Id))).ToArray(); if (linkedScenarios.Any()) { throw new InvalidOperationException("Невозможно удалить сценарий, так как следующие триггеры ссылаются на него: " + linkedTriggers.Select(x => x.Name).Aggregate((z, y) => z + "; " + y)); } scenario.Dispose(); _scenariosIds.Remove(scenario.Id); _scenarios.RemoveAll(x => x.Id.Equals(scenario.Id)); RaiseOnScenarioRemoved(scenario); _dataManager.Set(ScenariosIdsKey, _scenariosIds); _dataManager.Clear(scenario.Id); }