public void DeleteSeasons(IUnitOfWorkRepository repository) { // Get all seasons for the game. using (var seasonRepository = new RepositoryFactory().CreateSeasonRepository()) using (var seasonCompetitionRepository = new RepositoryFactory().CreateSeasonCompetitionRepository()) using (var seasonCompetitionTeamRepository = new RepositoryFactory().CreateRepository<SeasonCompetitionTeam>()) using (var roundRepository = new RepositoryFactory().CreateRoundRepository()) using (var matchRepository = new RepositoryFactory().CreateMatchRepository()) { var seasons = seasonRepository.Find(season => season.GameId.Equals(_game.Id)); foreach (var season in seasons) { // Get season competitions. var seasonCompetitions = seasonCompetitionRepository.Find(sc => sc.SeasonId.Equals(season.Id)); foreach (var seasonCompetition in seasonCompetitions) { // Delete relations between the season competition and the teams. var seasonCompetitionTeams = seasonCompetitionTeamRepository.Find(team => team.SeasonCompetitionId.Equals(seasonCompetition.Id)); repository.RegisterDelete(seasonCompetitionTeams); // Delete rounds and their matches. var rounds = roundRepository.Find(round => round.SeasonCompetitionId.Equals(seasonCompetition.Id)); foreach (var round in rounds) { var matches = matchRepository.Find(match => match.RoundId.Equals(round.Id)); repository.RegisterDelete(matches); repository.RegisterDelete(round); } repository.RegisterDelete(seasonCompetition); } repository.RegisterDelete(season); } } }