public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            IList <Employeeskill> Employeeskills = new List <Employeeskill>();

            foreach (SelectListItem skill in SkillList)
            {
                if (skill.Selected)
                {
                    Employeeskills.Add(new Employeeskill {
                        SkillId = Convert.ToInt32(skill.Value)
                    });
                }
            }
            //checking if a new skills was added or not
            if (!string.IsNullOrEmpty(NewSkill))
            {
                //when a new skill is added, create a new skill instance and assign it to and EmployeeSkill entity.
                //It is then assigned to a collection of Employeeskills
                Skill skill = new Skill {
                    SkillName = NewSkill
                };
                Employeeskill employeeskill = new Employeeskill {
                    Skills = skill
                };
                Employeeskills.Add(employeeskill);
            }
            //The collection of Employeeskills is assigned to the Employee entity and saved to the database
            Employee.Employeeskills = Employeeskills;
            _context.Empployees.Add(Employee);
            await _context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }
        // To protect from overposting attacks, enable the specific properties you want to bind to.
        // For more details, see https://aka.ms/RazorPagesCRUD.
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            Employee EmployeeFromDB = await _context.Empployees.
                                      Include(m => m.Employeeskills).FirstOrDefaultAsync(m => m.Id == Employee.Id);

            IList <Employeeskill> Employeeskills = new List <Employeeskill>();
            //variable to hold removed skills
            IList <Employeeskill> SkillsToRemove = new List <Employeeskill>();
            //variable to hold newly added skills
            IList <Employeeskill> SkillsToAdd = new List <Employeeskill>();

            foreach (SelectListItem skill in SkillList)
            {
                if (skill.Selected)
                {
                    // Add all the selected skills to Employeeskills collection.
                    Employeeskills.Add(new Employeeskill
                    {
                        EmployeeId = Employee.Id, SkillId = Convert.ToInt32(skill.Value)
                    });
                    //if a new skill is assigned to the employee it is added
                    //to the SkillsToAdd collection
                    Employeeskill selectedSkill = EmployeeFromDB.Employeeskills.
                                                  Where(m => m.SkillId == Convert.ToInt32(skill.Value)).FirstOrDefault();
                    if (selectedSkill == null)
                    {
                        SkillsToAdd.Add(new Employeeskill
                        {
                            EmployeeId = Employee.Id, SkillId = Convert.ToInt32(skill.Value)
                        });
                    }
                }
            }
            //If a skill is not in the edited skill list, but present
            //in the skill list from the DB, it is added to
            // the SkillsToRemove collection.
            foreach (Employeeskill employeeskill in EmployeeFromDB.Employeeskills)
            {
                if (Employeeskills.Any(e => e.EmployeeId == employeeskill.EmployeeId &&
                                       e.SkillId == employeeskill.SkillId) == false)
                {
                    SkillsToRemove.Add(employeeskill);
                }
            }
            //Section which assigns the modified values
            //to the employee entity from the database
            EmployeeFromDB.FirstName = Employee.FirstName;
            EmployeeFromDB.LastName  = Employee.LastName;
            //Delete the skills which are to be removed
            _context.RemoveRange(SkillsToRemove);
            //Adding newly assigned skills
            foreach (var empSKill in SkillsToAdd)
            {
                EmployeeFromDB.Employeeskills.Add(empSKill);
            }

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!EmployeeExists(Employee.Id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(RedirectToPage("./Index"));
        }