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); } }
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(); } }
public void Send <T>(IEnumerable <T> dataList, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity { RedisConnectionPool.TryUpdateEntity(dataList); }
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(); }
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); }
public void Send <T>(T[] dataList, bool isChange, string connectKey, EntityBeforeProcess handle) where T : AbstractEntity { RedisManager.AppendToDict(_redisKey, dataList); }