Exemple #1
0
 public void Send <T>(T[] dataList, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity
 {
     foreach (var data in dataList)
     {
         UpdateToDb(data, isChange, connectKey, handle);
     }
 }
Exemple #2
0
        private void UpdateToDb <T>(T data, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity
        {
            if (data == null)
            {
                return;
            }
            SchemaTable    schemaTable = data.GetSchema();
            DbBaseProvider dbProvider  = DbConnectionProvider.CreateDbProvider(connectKey ?? schemaTable.ConnectKey);

            if (dbProvider == null)
            {
                return;
            }
            CommandStruct command = GenerateCommand(dbProvider, data, schemaTable, isChange, handle);

            if (command != null)
            {
                dbProvider.ExecuteNonQuery(data.GetIdentityId(), CommandType.Text, command.Sql, command.Parameters);
                data.OnUnNew();
            }
        }
Exemple #3
0
 public void Send <T>(IEnumerable <T> dataList, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity
 {
     RedisConnectionPool.TryUpdateEntity(dataList);
 }
Exemple #4
0
        private void UpdateToDb <T>(T data, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity
        {
            if (data == null)
            {
                return;
            }

            SchemaTable schemaTable = data.GetSchema();

            if (!schemaTable.IsStoreInDb ||
                (string.IsNullOrEmpty(schemaTable.ConnectKey) &&
                 string.IsNullOrEmpty(schemaTable.ConnectionString)))
            {
                return;
            }

            string[] columns = GetColumns(schemaTable, data, isChange);
            if (columns == null || columns.Length == 0)
            {
                TraceLog.WriteError("Class:{0} is not change column.", data.GetType().FullName);
                return;
            }

            DbBaseProvider dbProvider = DbConnectionProvider.CreateDbProvider(connectKey ?? schemaTable.ConnectKey);

            if (dbProvider == null)
            {
                //TraceLog.WriteError("DbBaseProvider:{0} is null.", (connectKey ?? schemaTable.ConnectKey));
                return;
            }
            CommandStruct command = null;

            if (data.IsDelete)
            {
                command = dbProvider.CreateCommandStruct(schemaTable.Name, CommandMode.Delete);
            }
            else if (schemaTable.AccessLevel == AccessLevel.WriteOnly)
            {
                command = dbProvider.CreateCommandStruct(schemaTable.Name, CommandMode.Insert);
            }
            else
            {
                command = dbProvider.CreateCommandStruct(schemaTable.Name, CommandMode.ModifyInsert);
            }
            //StringBuilder changeLog = new StringBuilder();
            //changeLog.AppendFormat("\"Keys\":\"{0}\"", data.GetKeyCode());
            //处理列
            foreach (string columnName in columns)
            {
                if (columnName.IsEmpty())
                {
                    continue;
                }

                SchemaColumn schemaColumn;
                if (schemaTable.Columns.TryGetValue(columnName, out schemaColumn))
                {
                    if (schemaColumn.Disable || schemaColumn.IsIdentity)
                    {
                        continue;
                    }
                    object value = data.GetPropertyValue(schemaColumn.CanRead, columnName);
                    if (handle != null)
                    {
                        var e = new EntityEvent()
                        {
                            Data = data, FieldName = columnName, FieldValue = value
                        };
                        value = handle(e);
                    }
                    if (CovertDataValue(schemaTable, schemaColumn, ref value))
                    {
                        //changeLog.AppendFormat(",\"{0}\":\"{1}\"", columnName, value);
                        IDataParameter parameter = CreateParameter(dbProvider, columnName, schemaColumn.DbType, value);
                        command.AddParameter(parameter);
                    }
                }
            }
            //处理条件
            string[] keyList = schemaTable.Keys;
            if (keyList.Length == 0)
            {
                throw new ArgumentNullException(string.Format("Table:{0} key is empty.", schemaTable.Name));
            }
            string condition = string.Empty;

            command.Filter = dbProvider.CreateCommandFilter();
            foreach (string columnName in keyList)
            {
                SchemaColumn schemaColumn;
                if (schemaTable.Columns.TryGetValue(columnName, out schemaColumn))
                {
                    string keyName   = columnName;
                    string paramName = "F_" + columnName;
                    if (condition.Length > 0)
                    {
                        condition += " AND ";
                    }
                    condition += dbProvider.FormatFilterParam(schemaColumn.Name, "", paramName);

                    object value = data.GetPropertyValue(schemaColumn.CanRead, columnName);
                    if (handle != null)
                    {
                        var e = new EntityEvent()
                        {
                            Data = data, FieldName = columnName, FieldValue = value
                        };
                        value = handle(e);
                    }
                    if (CovertDataValue(schemaTable, schemaColumn, ref value))
                    {
                        IDataParameter parameter = CreateParameter(dbProvider, paramName, schemaColumn.DbType, value);
                        command.Filter.AddParam(parameter);
                        if (!schemaColumn.IsIdentity)
                        {
                            command.AddKey(CreateParameter(dbProvider, keyName, schemaColumn.DbType, value));
                        }
                    }
                }
            }
            command.Filter.Condition = condition;
            command.Parser();
            //if (schemaTable.AccessLevel == AccessLevel.ReadWrite)
            //{
            //    TraceLog.ReleaseWriteDebug("Update change \"{0}\" data:{1}", data.GetType().FullName, changeLog.ToString());
            //}
            dbProvider.ExecuteNonQuery(data.GetIdentityId(), CommandType.Text, command.Sql, command.Parameters);
            data.OnUnNew();
        }
Exemple #5
0
        private CommandStruct GenerateCommand <T>(DbBaseProvider dbProvider, T data, SchemaTable schemaTable, bool isChange, EntityBeforeProcess handle) where T : AbstractEntity
        {
            CommandStruct command = null;

            if (!(schemaTable.StorageType.HasFlag(StorageType.ReadOnlyDB) ||
                  schemaTable.StorageType.HasFlag(StorageType.ReadWriteDB) ||
                  schemaTable.StorageType.HasFlag(StorageType.WriteOnlyDB)) ||
                (string.IsNullOrEmpty(schemaTable.ConnectKey) &&
                 string.IsNullOrEmpty(schemaTable.ConnectionString)))
            {
                return(null);
            }

            string[] columns = GetColumns(schemaTable, data, isChange);
            if (columns == null || columns.Length == 0)
            {
                TraceLog.WriteError("Class:{0} is not change column.", data.GetType().FullName);
                return(null);
            }
            string tableName = schemaTable.GetTableName();

            if (data.IsDelete)
            {
                command = dbProvider.CreateCommandStruct(tableName, CommandMode.Delete);
            }
            else if (schemaTable.AccessLevel == AccessLevel.WriteOnly)
            {
                command = dbProvider.CreateCommandStruct(tableName, CommandMode.Insert);
            }
            else
            {
                command = dbProvider.CreateCommandStruct(tableName, CommandMode.ModifyInsert);
            }
            //StringBuilder changeLog = new StringBuilder();
            //changeLog.AppendFormat("\"Keys\":\"{0}\"", data.GetKeyCode());
            //处理列
            foreach (string columnName in columns)
            {
                if (columnName.IsEmpty())
                {
                    continue;
                }

                SchemaColumn schemaColumn;
                if (schemaTable.Columns.TryGetValue(columnName, out schemaColumn))
                {
                    if (schemaColumn.Disable || schemaColumn.IsIdentity)
                    {
                        continue;
                    }
                    object value = data.GetPropertyValue(schemaColumn.CanRead, columnName);
                    if (handle != null)
                    {
                        var e = new EntityEvent()
                        {
                            Data = data, FieldName = columnName, FieldValue = value
                        };
                        value = handle(e);
                    }
                    if (CovertDataValue(schemaTable, schemaColumn, ref value))
                    {
                        //changeLog.AppendFormat(",\"{0}\":\"{1}\"", columnName, value);
                        IDataParameter parameter = CreateParameter(dbProvider, columnName, schemaColumn.DbType, value);
                        command.AddParameter(parameter);
                    }
                }
            }
            //处理条件
            string[] keyList = schemaTable.Keys;
            if (keyList.Length == 0)
            {
                throw new ArgumentNullException(string.Format("Table:{0} key is empty.", schemaTable.EntityName));
            }
            string condition = string.Empty;

            command.Filter = dbProvider.CreateCommandFilter();
            foreach (string columnName in keyList)
            {
                SchemaColumn schemaColumn;
                if (schemaTable.Columns.TryGetValue(columnName, out schemaColumn))
                {
                    string keyName   = columnName;
                    string paramName = "F_" + columnName;
                    if (condition.Length > 0)
                    {
                        condition += " AND ";
                    }
                    condition += dbProvider.FormatFilterParam(schemaColumn.Name, "", paramName);

                    object value = data.GetPropertyValue(schemaColumn.CanRead, columnName);
                    if (handle != null)
                    {
                        var e = new EntityEvent()
                        {
                            Data = data, FieldName = columnName, FieldValue = value
                        };
                        value = handle(e);
                    }
                    if (CovertDataValue(schemaTable, schemaColumn, ref value))
                    {
                        IDataParameter parameter = CreateParameter(dbProvider, paramName, schemaColumn.DbType, value);
                        command.Filter.AddParam(parameter);
                        if (!schemaColumn.IsIdentity)
                        {
                            command.AddKey(CreateParameter(dbProvider, keyName, schemaColumn.DbType, value));
                        }
                    }
                }
            }
            command.Filter.Condition = condition;
            command.Parser();
            return(command);
        }
Exemple #6
0
 public void Send <T>(T[] dataList, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity
 {
     RedisManager.AppendToDict(_redisKey, dataList);
 }