public async Task test() { MysqlDbContent mysqlDbContent = services.BuildServiceProvider().GetRequiredService <MysqlDbContent>(); var info = mysqlDbContent.setting.FirstOrDefault(a => a.Id == 18); info.Contact = "142"; //伪造并发 mysqlDbContent.Database.ExecuteSqlCommand("update setting set Contact='37a1222111' where Id=" + info.Id); try { var s = mysqlDbContent.SaveChanges(); } catch (DbUpdateConcurrencyException ex) //配置并发令牌之后 触发的事件 { foreach (var entry in ex.Entries) { //第一种 //foreach (var property in entry.Metadata.GetProperties()) //{ // ////当前值 // //var proposedValue = entry.Property(property.Name).CurrentValue; // ////原始值 // //var originalValue = entry.Property(property.Name).OriginalValue; // //数据库值 // var databaseValue = entry.GetDatabaseValues().GetValue<object>(property.Name); // //原始值等于数据库 保存数据库的值和原始值一直 防止提交的时候再次报错 // entry.Property(property.Name).OriginalValue = databaseValue; //} ////重新提交 //entry.Context.SaveChanges(); //第二种 // 保存数据库的值和原始值一直 防止提交的时候再次报错 entry.OriginalValues.SetValues(entry.GetDatabaseValues()); entry.Context.SaveChanges(); } } catch (Exception ex) { } }
public ValuesController(MysqlDbContent _mysqlDbContent, IUnitOfWork <MysqlDbContent> _unitOfWork, IUnitOfWork <ConfigurationDbContent> unitOf) { mysqlDbContent = _mysqlDbContent; unitOfWork = _unitOfWork; }