Пример #1
0
        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;
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
        }
Пример #5
0
        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);
        }