private void TransformAndStoreCriteria(CharacterAchievementsSummary characterAchievements)
        {
            var character = characterAchievements.Character;

            var entities = _dataContext
                           .CharacterCriterias
                           .Where(c => c.CharacterId == character.Id);

            _dataContext.CharacterCriterias.RemoveRange(entities);

            var criteriaToAdd = new List <entities::CharacterCriteria>();

            var criteria =
                characterAchievements
                .Achievements
                .Where(a => a.Criteria != null)
                .Select(c => c.Criteria);

            _dataContext.CharacterCriterias.AddRange(
                criteria.Select(c =>
                                new entities::CharacterCriteria
            {
                CharacterId = character.Id,
                CriteriaId  = c.Id,
                IsCompleted = c.IsCompleted
            }));

            var childCriteria =
                criteria
                .Where(cr => cr.ChildCriteria != null)
                .SelectMany(c => c.ChildCriteria);

            _dataContext.CharacterCriterias.AddRange(
                childCriteria.Select(c =>
                                     new entities::CharacterCriteria
            {
                CharacterId = character.Id,
                CriteriaId  = c.Id,
                Amount      = c.Amount,
                IsCompleted = c.IsCompleted
            }));

            var childOfChildrenCriteria =
                childCriteria
                .Where(cr => cr.SubCriteria != null)
                .SelectMany(c => c.SubCriteria);

            _dataContext.CharacterCriterias.AddRange(
                childOfChildrenCriteria.Select(c =>
                                               new entities::CharacterCriteria
            {
                CharacterId = character.Id,
                CriteriaId  = c.Id,
                Amount      = c.Amount,
                IsCompleted = c.IsCompleted
            }));

            _dataContext.SaveChanges();
        }
        private void TransformAndStoreAchievements(CharacterAchievementsSummary characterAchievements)
        {
            var character = characterAchievements.Character;

            var characterAchievementsToAddOrUpdate =
                characterAchievements
                .Achievements
                .Select(c =>
                        new entities::CharacterAchievement
            {
                CharacterId        = character.Id,
                AchievementId      = c.Achievement.Id,
                CompletedTimestamp = c.TimeStamp
            });

            var entities = _dataContext
                           .CharacterAchievements
                           .Where(c => c.CharacterId == character.Id);

            _dataContext.CharacterAchievements.RemoveRange(entities);
            _dataContext.CharacterAchievements.AddRange(characterAchievementsToAddOrUpdate);

            _dataContext.SaveChanges();
        }
 private void TransformAndStore(CharacterAchievementsSummary characterAchievements)
 {
     TransformAndStoreAchievements(characterAchievements);
     TransformAndStoreCriteria(characterAchievements);
 }