public async Task <IActionResult> Edit(int id, string[] selectedInstruments, Byte[] RowVersion) { var musicianToUpdate = await _context.Musicians .Include(m => m.Instrument) .Include(m => m.Plays).ThenInclude(m => m.Instrument) .SingleOrDefaultAsync(m => m.ID == id); if (musicianToUpdate == null) { return(NotFound()); } UpdatePlays(selectedInstruments, musicianToUpdate); if (await TryUpdateModelAsync <Musician>(musicianToUpdate, "", m => m.StageName, m => m.FName, m => m.MName, m => m.LName, m => m.Phone, m => m.DOB, m => m.SIN, m => m.InstrumentID)) { try { _context.Entry(musicianToUpdate).Property("RowVersion").OriginalValue = RowVersion; await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } catch (DbUpdateConcurrencyException ex) { //if (!MusicianExists(musicianToUpdate.ID)) //{ // return NotFound(); //} var exceptionEntry = ex.Entries.Single(); var clientValues = (Musician)exceptionEntry.Entity; var databaseEntry = exceptionEntry.GetDatabaseValues(); if (databaseEntry == null) { ModelState.AddModelError("", "Unable to save changes. The Musician was deleted by another user."); } else { var databaseValues = (Musician)databaseEntry.ToObject(); if (databaseValues.FName != clientValues.FName) { ModelState.AddModelError("FName", "Current value: " + databaseValues.FName); } if (databaseValues.MName != clientValues.MName) { ModelState.AddModelError("MName", "Current value: " + databaseValues.MName); } if (databaseValues.LName != clientValues.LName) { ModelState.AddModelError("LName", "Current value: " + databaseValues.LName); } if (databaseValues.Phone != clientValues.Phone) { ModelState.AddModelError("Phone", "Current value: " + databaseValues.Phone); } if (databaseValues.DOB != clientValues.DOB) { ModelState.AddModelError("DOB", "Current value: " + databaseValues.DOB); } if (databaseValues.SIN != clientValues.SIN) { ModelState.AddModelError("SIN", "Current value: " + databaseValues.SIN); } if (databaseValues.InstrumentID != clientValues.InstrumentID) { Instrument databaseInstrument = await _context.Instruments.SingleOrDefaultAsync(i => i.ID == databaseValues.InstrumentID); ModelState.AddModelError("InstrumentID", $"Current value: {databaseInstrument?.Name}"); } if (databaseValues.StageName != clientValues.StageName) { ModelState.AddModelError("StageName", "Current value: " + databaseValues.StageName); } ModelState.AddModelError(string.Empty, "The record you are trying to edit" + "has been modified by another user. Please review the changes and try again."); } } catch (DbUpdateException dex) { if (dex.InnerException.Message.Contains("IX_Musicians_SIN")) { ModelState.AddModelError("SIN", "SIN numbers must be unique."); } else { ModelState.AddModelError("", dex.Message.ToString()); } } } //Validaiton Error so give the user another chance. PopulateAssignedInstrumentData(musicianToUpdate); PopulateInstrumentDropdown(musicianToUpdate); return(View(musicianToUpdate)); }
public async Task <IActionResult> Edit(int id, Byte[] RowVersion) { var albumToUpdate = await _context.Albums.SingleOrDefaultAsync(a => a.ID == id); if (albumToUpdate == null) { return(NotFound()); } if (await TryUpdateModelAsync <Album>(albumToUpdate, "", a => a.Name, a => a.YearProduced, a => a.Price, a => a.GenreID)) { try { _context.Entry(albumToUpdate).Property("RowVersion").OriginalValue = RowVersion; await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } catch (DbUpdateConcurrencyException ex) { var exceptionEntry = ex.Entries.Single(); var clientValues = (Album)exceptionEntry.Entity; var databaseEntry = exceptionEntry.GetDatabaseValues(); if (databaseEntry == null) { ModelState.AddModelError("", "Unable to save changes. The Album was deleted by another user."); } else { var databaseValues = (Album)databaseEntry.ToObject(); if (databaseValues.Name != clientValues.Name) { ModelState.AddModelError("Name", "Current value: " + databaseValues.Name); } if (databaseValues.YearProduced != clientValues.YearProduced) { ModelState.AddModelError("YearProduced", "Current value:" + databaseValues.YearProduced); } //Price if (databaseValues.Price != clientValues.Price) { ModelState.AddModelError("Price", "Current value:" + databaseValues.Price); } //GenreID if (databaseValues.GenreID != clientValues.GenreID) { Genre databaseGenre = await _context.Genres.SingleOrDefaultAsync(i => i.ID == databaseValues.GenreID); ModelState.AddModelError("GenreID", $"Current value: {databaseGenre?.Name}"); } ModelState.AddModelError(string.Empty, "The record you are trying to edit" + "has been modified by another user. Please review the changes and try again."); } } catch (DbUpdateException dex) { if (dex.InnerException.Message.Contains("IX_Albums_Name_YearProduced")) { ModelState.AddModelError("YearProduced", "An album called " + albumToUpdate.Name + " already exists from " + albumToUpdate.YearProduced.ToString()); } else { ModelState.AddModelError("", dex.Message.ToString()); } } } PopulateGenreDropdown(albumToUpdate); return(View(albumToUpdate)); }