public virtual void Edit(T t, String[] modifiedProperties = null) { List <LogProperty> oldProperties, newProperties; set.Attach(t); oldProperties = LogUtilities.GetLogProperties(typeof(T), context.Entry(t).GetDatabaseValues(), context); newProperties = LogUtilities.GetLogProperties(typeof(T), context.Entry(t).CurrentValues, context); string difference = LogUtilities.SerializeDifference(typeof(T), oldProperties, newProperties, context); if (difference != null) { Module module = LogUtilities.GetModuleFromType(typeof(T)); int entityID = (int)context.Entry(t).Property("ID").CurrentValue; Log logEntry = new Log(entityID, module, Activity.Edited, user.ID, user.Name, difference); log.Add(logEntry); } if (modifiedProperties != null) { context.Configuration.AutoDetectChangesEnabled = false; var entry = context.Entry(t); foreach (var prop in modifiedProperties) { entry.Property(prop).IsModified = true; } } else { context.Entry(t).State = EntityState.Modified; } }