private SqlSugarClient GetThreadContext(string key) { SqlSugarClient result = CallContextThread <SqlSugarClient> .GetData(key); if (result == null) { CallContextThread <SqlSugarClient> .SetData(key, new SqlSugarClient(_configs)); result = CallContextThread <SqlSugarClient> .GetData(key); if (this._configAction != null) { this._configAction(result); } } return(result); }
private SqlSugarClient GetThreadContext(string key) { SqlSugarClient result = CallContextThread <SqlSugarClient> .GetData(key); if (result == null) { List <ConnectionConfig> configList = GetCopyConfigs(); CallContextThread <SqlSugarClient> .SetData(key, new SqlSugarClient(configList)); result = CallContextThread <SqlSugarClient> .GetData(key); if (this._configAction != null) { this._configAction(result); } } return(result); }
protected void ResolveNewExpressions(ExpressionParameter parameter, Expression item, string asName) { if (item is ConstantExpression) { this.Expression = item; this.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; parameter.Context.Result.Append(this.Context.GetAsString(asName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } else if ((item is MemberExpression) && ((MemberExpression)item).Expression == null) { var paramterValue = ExpressionTool.GetPropertyValue(item as MemberExpression); string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; parameter.Context.Result.Append(this.Context.GetAsString(asName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, paramterValue)); } else if ((item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant) { this.Expression = item; this.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; parameter.Context.Result.Append(this.Context.GetAsString(asName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } else if (item is MemberExpression) { if (this.Context.Result.IsLockCurrentParameter == false) { this.Context.Result.CurrentParameter = parameter; this.Context.Result.IsLockCurrentParameter = true; parameter.IsAppendTempDate(); this.Expression = item; if (IsBoolValue(item)) { this.Expression = (item as MemberExpression).Expression; } this.Start(); parameter.IsAppendResult(); this.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); this.Context.Result.CurrentParameter = null; } } else if (item is UnaryExpression && ((UnaryExpression)item).Operand is MemberExpression) { if (this.Context.Result.IsLockCurrentParameter == false) { var expression = ((UnaryExpression)item).Operand as MemberExpression; var isDateTimeNow = ((UnaryExpression)item).Operand.ToString() == "DateTime.Now"; if (expression.Expression == null && !isDateTimeNow) { this.Context.Result.CurrentParameter = parameter; this.Context.Result.IsLockCurrentParameter = true; parameter.IsAppendTempDate(); this.Expression = item; this.Start(); parameter.IsAppendResult(); this.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); this.Context.Result.CurrentParameter = null; } else if (expression.Expression is ConstantExpression || isDateTimeNow) { string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; parameter.Context.Result.Append(this.Context.GetAsString(asName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, ExpressionTool.GetMemberValue(expression.Member, expression))); } else { this.Context.Result.CurrentParameter = parameter; this.Context.Result.IsLockCurrentParameter = true; parameter.IsAppendTempDate(); this.Expression = expression; this.Start(); parameter.IsAppendResult(); this.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); this.Context.Result.CurrentParameter = null; } } } else if (item is UnaryExpression && ((UnaryExpression)item).Operand is ConstantExpression) { if (this.Context.Result.IsLockCurrentParameter == false) { this.Expression = ((UnaryExpression)item).Operand; this.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; parameter.Context.Result.Append(this.Context.GetAsString(asName, parameterName)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } } else if (item is BinaryExpression) { if (this.Context.Result.IsLockCurrentParameter == false) { var newContext = this.Context.GetCopyContextWithMapping(); var resolveExpressType = this.Context.IsSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple; newContext.Resolve(item, resolveExpressType); this.Context.Index = newContext.Index; this.Context.ParameterIndex = newContext.ParameterIndex; if (newContext.Parameters.HasValue()) { this.Context.Parameters.AddRange(newContext.Parameters); } this.Context.Result.Append(this.Context.GetAsString(asName, newContext.Result.GetString())); this.Context.Result.CurrentParameter = null; if (this.Context.SingleTableNameSubqueryShortName.IsNullOrEmpty() && newContext.SingleTableNameSubqueryShortName.HasValue()) { this.Context.SingleTableNameSubqueryShortName = newContext.SingleTableNameSubqueryShortName; } } } else if (item.Type.IsClass()) { var mappingKeys = GetMappingColumns(parameter.CurrentExpression); var isSameType = mappingKeys.Keys.Count > 0; CallContextThread <Dictionary <string, string> > .SetData("Exp_Select_Mapping_Key", mappingKeys); CallContextAsync <Dictionary <string, string> > .SetData("Exp_Select_Mapping_Key", mappingKeys); this.Expression = item; this.Start(); var shortName = parameter.CommonTempData; var listProperties = item.Type.GetProperties().Cast <PropertyInfo>().ToList(); foreach (var property in listProperties) { var hasIgnore = this.Context.IgnoreComumnList != null && this.Context.IgnoreComumnList.Any(it => it.EntityName.Equals(item.Type.Name, StringComparison.CurrentCultureIgnoreCase) && it.PropertyName.Equals(property.Name, StringComparison.CurrentCultureIgnoreCase)); if (hasIgnore) { continue; } if (property.PropertyType.IsClass()) { var comumnInfo = property.GetCustomAttribute <SugarColumn>(); if (comumnInfo != null && comumnInfo.IsJson) { asName = GetAsName(item, shortName, property); } } else if (isSameType) { asName = GetAsNameAndShortName(item, shortName, property); } else { asName = GetAsName(item, shortName, property); } } } else if (item.Type == UtilConstants.BoolType && item is MethodCallExpression && (item as MethodCallExpression).Method.Name == "Any" && IsSubMethod(item as MethodCallExpression)) { this.Expression = item; this.Start(); var sql = this.Context.DbMehtods.IIF(new MethodCallExpressionModel() { Args = new List <MethodCallExpressionArgs>() { new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData.ObjToString() }, new MethodCallExpressionArgs() { IsMember = true, MemberName = 1 }, new MethodCallExpressionArgs() { IsMember = true, MemberName = 0 } } }); parameter.Context.Result.Append(this.Context.GetAsString(asName, sql)); } else if (item is MethodCallExpression || item is UnaryExpression || item is ConditionalExpression || item.NodeType == ExpressionType.Coalesce) { this.Expression = item; this.Start(); parameter.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); } else { Check.ThrowNotSupportedException(item.GetType().Name); } }
private Dictionary <string, object> DataReaderToList <T>(IDataReader reader, Type tType, List <PropertyInfo> classProperties, List <T> reval) { var readerValues = DataReaderToDictionary(reader, tType); var mappingKeys = CallContextThread <Dictionary <string, string> > .GetData("Exp_Select_Mapping_Key"); if (mappingKeys == null) { mappingKeys = CallContextAsync <Dictionary <string, string> > .GetData("Exp_Select_Mapping_Key"); } var result = new Dictionary <string, object>(); foreach (var item in classProperties) { var name = item.Name; var typeName = tType.Name; if (item.PropertyType.IsClass()) { if (item.PropertyType.FullName == "Newtonsoft.Json.Linq.JObject") { result.Add(name, DeserializeObject <dynamic>(readerValues[item.Name].ToString())); } else if (IsJsonItem(readerValues, name)) { result.Add(name, DeserializeObject <Dictionary <string, object> >(readerValues.First().Value.ObjToString())); } else if (IsJsonList(readerValues, item)) { result.Add(name, DeserializeObject <List <Dictionary <string, object> > >(readerValues[item.Name.ToLower()].ToString())); } else if (IsBytes(readerValues, item)) { result.Add(name, (byte[])readerValues[item.Name.ToLower()]); } else if (item.PropertyType == typeof(object)) { result.Add(name, readerValues[item.Name.ToLower()]); } else { result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval, mappingKeys)); } } else { if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase))) { var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase)).Value; if (addValue == DBNull.Value || addValue == null) { if (item.PropertyType.IsIn(UtilConstants.IntType, UtilConstants.DecType, UtilConstants.DobType, UtilConstants.ByteType)) { addValue = 0; } else if (item.PropertyType == UtilConstants.GuidType) { addValue = Guid.Empty; } else if (item.PropertyType == UtilConstants.DateType) { addValue = DateTime.MinValue; } else if (item.PropertyType == UtilConstants.StringType) { addValue = null; } else { addValue = null; } } else if (UtilMethods.GetUnderType(item.PropertyType) == UtilConstants.IntType) { addValue = Convert.ToInt32(addValue); } else if (UtilMethods.GetUnderType(item.PropertyType) == UtilConstants.LongType) { addValue = Convert.ToInt64(addValue); } result.Add(name, addValue); } } } return(result); }