private async Task AddChampionAbilitiesStatistics(ChampionPageDto championPageDto) { var championAbilities = new ChampionAbilities { ChampionId = championPageDto.Key, WinRate = championPageDto.SkillsWinRate, TotalMatches = championPageDto.SkillsMatchesCount, SkillPriority = string.Join(", ", championPageDto.SkillsPriority), }; await this.championAbilitiesRepository.AddAsync(championAbilities); await this.championAbilitiesRepository.SaveChangesAsync(); var championAbilitiesId = this.championAbilitiesRepository .AllAsNoTracking() .FirstOrDefault(x => x.ChampionId == championPageDto.Key && x.TotalMatches == championPageDto.SkillsMatchesCount && x.WinRate == championPageDto.SkillsWinRate).Id; var dbChampionAbilities = this.championAbilitiesRepository.All().FirstOrDefault(x => x.Id == championAbilitiesId); foreach (var abilityTypeDto in championPageDto.SkillsPriority) { var abilityId = this.baseChampionAbilitiesRepository .AllAsNoTracking() .FirstOrDefault(a => a.Id == championPageDto.Key + abilityTypeDto).Id; var spellToAdd = await this.baseChampionAbilitiesRepository.GetByIdWithDeletedAsync(abilityId); dbChampionAbilities.Abilities.Add(spellToAdd); var championAbilitiesAbility = new ChampionAbilitiesAbility { BaseAbilityId = abilityId, ChampionAbilitiesId = championAbilitiesId, }; await this.championAbilitiesAbilitiesRepository.AddAsync(championAbilitiesAbility); } this.championAbilitiesRepository.Update(dbChampionAbilities); await this.championAbilitiesAbilitiesRepository.SaveChangesAsync(); this.championsRepository.GetByIdWithDeletedAsync(championPageDto.Key).Result.BestAbilities.Add(championAbilities); }
public async Task <NonDataResult> InsertLinkingRelationships(IEnumerable <ChampionModel> champions) { var linkageModels = champions.SelectMany(x => x.ChampionLinkageModels); var abilities = await Context.Ability.Where(a => linkageModels.Select(x => x.PaladinsAbilityId).Contains(a.PabilityId)) .Select(a => new { a.Id, a.PabilityId }).ToListAsync(); var champs = await Context.Champion.Where(c => champions.Select(x => x.PaladinsChampionId).Contains(c.PchampionId)) .Select(c => new { c.Id, c.PchampionId }).ToListAsync(); List <ChampionAbilities> championAbilities = new List <ChampionAbilities>(); foreach (var linkedModel in linkageModels) { var ability = abilities.Where(x => x.PabilityId == linkedModel.PaladinsAbilityId).Select(x => new { AbilityId = x.Id, linkedModel.PaladinsAbilityId, linkedModel.PaladinsChampionId, }).FirstOrDefault(); var champ = champs.Where(x => x.PchampionId == linkedModel.PaladinsChampionId).Select(x => new { ChampionId = x.Id, linkedModel.PaladinsAbilityId, linkedModel.PaladinsChampionId, }).FirstOrDefault(); var link = new ChampionAbilities { ChampionId = champ.ChampionId, AbilityId = ability.AbilityId, }; championAbilities.Add(link); } return(await InsertListAsync(championAbilities)); }