public async Task <IActionResult> Edit(int?id, byte[] RowVersion) { if (id == null) { return(NotFound()); } var department = await _context.Department.Include(a => a.Administrator).SingleOrDefaultAsync(a => a.Id == id); if (department == null) { var Delete = new Department(); await TryUpdateModelAsync(Delete); ModelState.AddModelError(string.Empty, "信息可能已被其他人删除,请重试!"); ViewData["instructorId"] = new SelectList(_context.Instructor, "Id", "RealName", Delete.InstructorId); return(View(Delete)); ; } _context.Entry(department).Property("RowVersion").OriginalValue = RowVersion; if (await TryUpdateModelAsync(department, "", b => b.name, b => b.StarDate, b => b.InstructorId, b => b.Budget)) { try { await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } catch (DbUpdateException ex) { var excepyionEntity = ex.Entries.Single(); //返回ef中追踪的对象,ef在内存中 var clientValue = (Department)excepyionEntity.Entity; //返回数据库中的内容/对象 var databaseEntity = excepyionEntity.GetDatabaseValues(); if (databaseEntity == null) { ModelState.AddModelError(string.Empty, "信息可能已被其他人删除,请重试!"); } else { var databaseValue = (Department)databaseEntity.ToObject(); if (databaseValue.name != clientValue.name) { ModelState.AddModelError("name", $"数值错误:{databaseValue.name}"); } if (databaseValue.StarDate != clientValue.StarDate) { ModelState.AddModelError("StarDate", $"数值错误:{databaseValue.StarDate}"); } if (databaseValue.Budget != clientValue.Budget) { ModelState.AddModelError("Budget", $"数值错误:{databaseValue.Budget}"); } //可能存在有人把老师给删了级联操作改动部门(可能老师时部门主任或者更换主任)所以判断老师是否存在 if (databaseValue.InstructorId != clientValue.InstructorId) { //查询老师信息 var InstuctorEntity = await _context.Instructor.SingleOrDefaultAsync(a => a.Id == databaseValue.Id); //用id进行数据库操作,用姓名显示 ModelState.AddModelError("InstructorId", $"数值错误:{InstuctorEntity?.RealName}"); } ModelState.AddModelError("", $"您的操作已经被其他用户提前修改,请刷新页面使用修改后的值进行操作!"); department.RowVersion = (byte[])databaseValue.RowVersion; ModelState.Remove("RowVersion"); } } } ViewBag.InstructorId = new SelectList(_context.Instructor, "Id", "RealName", department.InstructorId); return(View(department)); }