Ejemplo n.º 1
0
        public override int SaveChanges()
        {
            if (LogChangesDuringSave)
            {
                if (!BusinessName.IsEmpty())
                {
                    //根据表示判断用重写的SaveChanges方法,还是普通的上下文SaveChanges方法
                    var entries = from e in this.ChangeTracker.Entries()
                                  where e.State != EntityState.Unchanged
                                  select e;
                    //过滤所有修改了的实体,包括:增加 / 修改 / 删除
                    string       operationType = string.Empty;
                    T_LogSetting logsetting    = new T_LogSetting();
                    IList <T_LogSettingDetail> logsettingdetails = new List <T_LogSettingDetail>();
                    if (entries != null)
                    {
                        foreach (var entry in entries)
                        {
                            InitLogSetting(entry, logsetting, logsettingdetails);
                        }
                        T_LogSetting.Add(logsetting);
                    }
                    if (logsettingdetails != null && logsettingdetails.Count() > 0)
                    {
                        T_LogSettingDetail.AddRange(logsettingdetails);
                    }
                }
            }

            return(base.SaveChanges());  //返回普通的上下文SaveChanges方法
        }
Ejemplo n.º 2
0
        private void InitLogSetting(DbEntityEntry entry, T_LogSetting logsetting, IList <T_LogSettingDetail> logsettingdetails)
        {
            logsetting.BusinessName     = this.BusinessName;
            logsetting.IP               = Net.Ip;
            logsetting.Id               = Guid.NewGuid();
            logsetting.TableName        = entry.Entity.GetType().Name;
            logsetting.Url              = "";
            logsetting.IsDelete         = false;
            logsetting.CreatorUserId    = entry.CurrentValues["CreatorUserId"].ToGuid();
            logsetting.CreatorTime      = DateTime.Now;
            logsetting.DeleteTime       = logsetting.CreatorTime;
            logsetting.DeleteUserId     = logsetting.CreatorUserId;
            logsetting.LastModifyTime   = logsetting.CreatorTime;
            logsetting.LastModifyUserId = logsetting.CreatorUserId;
            logsetting.PrimaryKey       = entry.CurrentValues["Id"].ToGuid();
            logsetting.ModuleKey        = ModuleKey.ToGuid();
            switch (entry.State)
            {
            case EntityState.Added:
                logsetting.OperationType = "增加";
                break;

            case EntityState.Deleted:
                logsetting.OperationType = "删除";
                break;

            case EntityState.Modified:
                logsetting.OperationType = "修改";
                break;
            }
            StringBuilder sbNewContent = new StringBuilder("{");
            StringBuilder sbOldContent = new StringBuilder("{");

            foreach (var propertyName in entry.CurrentValues.PropertyNames.Where(it => it != "RowVersion"))
            {
                if (entry.CurrentValues[propertyName] != null)
                {
                    //entry.CurrentValues[propertyName].GetType()
                    sbNewContent.AppendFormat("\"{0}\":{1}{2}{1},", propertyName, entry.CurrentValues[propertyName].GetType().Name.ToLower().Equals("string") ? "\"" : "", entry.CurrentValues[propertyName]);
                    if (entry.State.Equals(EntityState.Modified))
                    {
                        DbPropertyValues databaseValues = entry.GetDatabaseValues();
                        if (!propertyName.Equals("RowVersion") && !entry.CurrentValues[propertyName].Equals(databaseValues[propertyName]))
                        {
                            logsettingdetails.Add(new T_LogSettingDetail
                            {
                                Id               = Guid.NewGuid(),
                                ColumnName       = propertyName,
                                IsDelete         = false,
                                LogId            = logsetting.Id,
                                NewColumnValue   = entry.CurrentValues[propertyName] == null ? " " : entry.CurrentValues[propertyName].ToString(),
                                OldColumnValue   = databaseValues[propertyName] == null ? " " : databaseValues[propertyName].ToString(),
                                CreatorTime      = DateTime.Now,
                                CreatorUserId    = entry.CurrentValues["CreatorUserId"].ToGuid(),
                                DeleteTime       = logsetting.CreatorTime,
                                DeleteUserId     = logsetting.CreatorUserId,
                                LastModifyTime   = logsetting.CreatorTime,
                                LastModifyUserId = logsetting.CreatorUserId
                            });
                        }
                        sbOldContent.AppendFormat("\"{0}\":{1}{2}{1},", propertyName, (databaseValues[propertyName] == null ? " " : databaseValues[propertyName]).GetType().Name.ToLower().Equals("string") ? "\"" : "", (databaseValues[propertyName] == null ? " " : databaseValues[propertyName]));
                    }
                }
            }
            logsetting.NewContent = sbNewContent.ToString().TrimEnd(',') + "}";
            logsetting.OldContent = sbOldContent.ToString().TrimEnd(',') + "}";
        }