public async Task <IAudited <T> > UpdateAsync <T>(T model) where T : class { var entry = _context.Entry(model); var databaseValues = await entry.GetDatabaseValuesAsync(); entry.OriginalValues.SetValues(databaseValues); entry.State = EntityState.Modified; foreach (var entryCurrentValue in entry.Properties) { if (entryCurrentValue.OriginalValue.Equals(entryCurrentValue?.CurrentValue)) { entryCurrentValue.IsModified = false; } } var auditedResult = new Audited <T>(model, entry); if (entry.Properties.Any(x => x.IsModified)) { await _context.SaveChangesAsync(); } entry.State = EntityState.Detached; return(auditedResult); }
public async Task <IAudited <T> > DeleteAsync <T>(T model) where T : class { var entry = _context.Entry(model); entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync()); entry.State = EntityState.Deleted; var auditResult = new Audited <T>(model, entry); await _context.SaveChangesAsync(); return(auditResult); }
public async Task <IAudited <T> > CreateAsync <T>(T model) where T : class { var entry = _context.Entry(model); entry.State = EntityState.Added; var auditResult = new Audited <T>(model, entry); await _context.SaveChangesAsync(); entry.State = EntityState.Detached; return(auditResult); }
public async Task <IAudited <T> > UpdateByPropertyValues <T>(T model, IDictionary <string, object> propertyValues) where T : class { var entry = _context.Entry(model); var databaseValues = await entry.GetDatabaseValuesAsync(); entry.OriginalValues.SetValues(databaseValues); entry.State = EntityState.Modified; entry.CurrentValues.SetValues(propertyValues); var auditedResult = new Audited <T>(model, entry); if (entry.Properties.Any(x => x.IsModified)) { await _context.SaveChangesAsync(); } return(auditedResult); }