public async Task <IActionResult> PutCourseSpecialization(int id, CourseSpecialization courseSpecialization)
        {
            if (id != courseSpecialization.CourseSpecializationId)
            {
                return(BadRequest());
            }

            _context.Entry(courseSpecialization).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CourseSpecializationExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public override async Task ReassignCourseSpecializationsAsync(UpdateDbContext context, bool useArchiveData = false)
        {
            if (!IsInitialized)
            {
                throw new InvalidOperationException(Resources.InvalidOperation_PluralsightCatalog_InitializeMethodInvokeRequired);
            }

            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var allCourses = await context.Courses
                             .Where(x => x.TrainingProviderId == TrainingProviderId && !x.IsDeleted)
                             .Select(x => new
            {
                x.Id,
                x.UrlName,
                CourseSpecializations = x.CourseSpecializations.ToList()
            })
                             .AsNoTracking()
                             .ToListAsync();

            var courseSpecializationsContainer = await GetCourseSpecializationsContainerAsync(useArchiveData);

            try
            {
                context.Configuration.AutoDetectChangesEnabled = false;

                foreach (var dbCourse in allCourses)
                {
                    Specializations specializationsForCourse;
                    if (courseSpecializationsContainer.TryGetValue(dbCourse.UrlName, out specializationsForCourse))
                    {
                        var currentSpecializations = specializationsForCourse.GetFlags <Specializations>().ToList();

                        foreach (var dbCourseSpecialization in dbCourse.CourseSpecializations)
                        {
                            if (currentSpecializations.Contains(dbCourseSpecialization.Specialization))
                            {
                                currentSpecializations.Remove(dbCourseSpecialization.Specialization);
                            }
                            else
                            {
                                context.SetStateToDeleted(dbCourseSpecialization);
                            }
                        }
                        foreach (var specialization in currentSpecializations)
                        {
                            var courseSpecialization = new CourseSpecialization
                            {
                                CourseId       = dbCourse.Id,
                                Specialization = specialization
                            };
                            context.SetStateToAdded(courseSpecialization);
                        }
                    }
                }
            }
            finally
            {
                context.Configuration.AutoDetectChangesEnabled = true;
            }

            await context.SaveChangesAsync();
        }
        public async Task <ActionResult <CourseSpecialization> > PostCourseSpecialization(CourseSpecialization courseSpecialization)
        {
            _context.Specializations.Add(courseSpecialization);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetCourseSpecialization", new { id = courseSpecialization.CourseSpecializationId }, courseSpecialization));
        }