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; } }
public virtual void Add(T t) { context.Configuration.AutoDetectChangesEnabled = false; // Need to save changes to aquire an entity that we can log set.Add(t); context.SaveChanges(); var module = LogUtilities.GetModuleFromType(typeof(T)); string data = LogUtilities.SerializeEntity(t, context); int entityID = (int)context.Entry(t).Property("ID").CurrentValue; log.Add(new Log(entityID, module, Activity.Created, user.ID, user.Name, data)); context.SaveChanges(); }
public virtual bool Delete(int id) { T entity = GetByID(id); if (entity != null) { var module = LogUtilities.GetModuleFromType(typeof(T)); string data = LogUtilities.SerializeEntity(entity, context); Log logEntry = new Log(id, module, Activity.Deleted, user.ID, user.Name, data); log.Add(logEntry); set.Remove(entity); return(true); } return(false); }
public void Add(List <T> entities) { foreach (var entity in entities) { set.Add(entity); } context.SaveChanges(); var module = LogUtilities.GetModuleFromType(typeof(T)); foreach (var entity in entities) { string data = LogUtilities.SerializeEntity(entity, context); int entityID = (int)typeof(T).GetProperty("ID").GetValue(entity); //int entityID = (int)context.Entry(entity).Property("ID").CurrentValue; log.Add(new Log(entityID, module, Activity.Created, user.ID, user.Name, data)); } context.SaveChanges(); }
public bool Delete(List <int> entityIDs) { var module = LogUtilities.GetModuleFromType(typeof(T)); var param = Expression.Parameter(typeof(T)); var property = IQueryableHelper.GetMemberExpr(param, "ID"); var val = Expression.Constant(entityIDs, typeof(List <int>)); var contains = typeof(List <int>).GetMethod("Contains", new[] { typeof(int) }); //method.Invoke(entityIDs, new object[] { }) var expr = Expression.Call(val, contains, property); LambdaExpression predicate = Expression.Lambda(expr, param);; var query = (IQueryable <T>) typeof(Queryable).GetMethods().Single(method => method.Name == "Where" && method.IsGenericMethodDefinition && method.GetParameters()[1].ParameterType.GetGenericArguments()[0].GenericTypeArguments[1] == typeof(bool)) .MakeGenericMethod(typeof(T)).Invoke(null, new object[] { AsQueryable(), predicate }); if (query.Count() != entityIDs.Count()) { return(false); } var entities = query.ToList(); foreach (var entity in entities) { var id = (int)typeof(T).GetProperty("ID").GetValue(entity); string data = LogUtilities.SerializeEntity(entity, context); Log logEntry = new Log(id, module, Activity.Deleted, user.ID, user.Name, data); log.Add(logEntry); set.Remove(entity); } return(true); }