//public ActionResult Edit([Bind(Include = "BookID,AuthorID,MainAuthorID,MainSubjectID,SubjectID,Title,AlternativeTitle,PublisherID,CreationDate,InitialPrintedYear,ActualPrintYear,CategoryID,Language,Material,Read,Pages,ISBN,Website,CoverLink,Rating,CodeWithinSerie,Condition,ReviewNote,Location,Serie")] Book book) public ActionResult Edit(BookViewModel bookViewModel) { if (ModelState.IsValid) { var bookToUpdate = _db.Query <Book>() .Include(i => i.Authors) .Include(i => i.Subjects).First(i => i.BookID == bookViewModel.Book.BookID); if (TryUpdateModel(bookToUpdate, "Book")) { // Update references to author (Add new/Remove old) var newAuthors = _db.Query <Author>().Where( m => bookViewModel.SelectedAuthors.Contains(m.AuthorID)).ToList(); var updatedAuthors = new HashSet <int>(bookViewModel.SelectedAuthors); foreach (Author author in _db.Query <Author>()) { if (!updatedAuthors.Contains(author.AuthorID)) { bookToUpdate.Authors.Remove(author); } else { bookToUpdate.Authors.Add(author); } } // Update references to subjects (Add new/Remove old) var newSubjects = _db.Query <Subject>().Where( s => bookViewModel.SelectedSubjects.Contains(s.SubjectID)).ToList(); var updatedSubjects = new HashSet <int>(bookViewModel.SelectedSubjects); foreach (Subject sub in _db.Query <Subject>()) { if (!updatedSubjects.Contains(sub.SubjectID)) { bookToUpdate.Subjects.Remove(sub); } else { bookToUpdate.Subjects.Add(sub); } } _db.SetState(bookToUpdate, EntityState.Modified); _db.SaveChanges(); } return(RedirectToAction("Index")); } PopulateCategoryDropDownList(bookViewModel.Book.CategoryID); PopulatePublishersDropDownList(bookViewModel.Book.PublisherID); return(View(bookViewModel)); }