diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoAccessory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoAccessory.cs index 848e9d4a3..634fd21e7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoAccessory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoAccessory.cs @@ -25,9 +25,17 @@ namespace SqlSugar var isDictionary = entityType.IsIn(UtilConstants.DicArraySO, UtilConstants.DicArraySS); if (isDictionary) DictionaryToParameters(parameters, sqlParameterKeyWord, result, entityType); + else if (parameters is List) + { + result = (parameters as List); + } + else if (parameters is SugarParameter[]) + { + result = (parameters as SugarParameter[]).ToList(); + } else { - Check.Exception(!entityType.IsAnonymousType(), "The parameter format is wrong. \nUse new{{xx=xx, xx2=xx2}} or \nDictionary or \nSugarParameter [] "); + Check.Exception(!entityType.IsAnonymousType(), "The parameter format is wrong. \nUse new{{xx=xx, xx2=xx2}} or \nDictionary or \nSugarParameter [] "); ProperyToParameter(parameters, propertyInfo, sqlParameterKeyWord, result, entityType); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index c58b2c4be..a0f96bc78 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -248,7 +248,7 @@ namespace SqlSugar } finally { - if (this.IsClose()) this.Close(); + if (this.IsAutoClose()) this.Close(); } } public virtual IDataReader GetDataReader(string sql, params SugarParameter[] parameters) @@ -260,7 +260,7 @@ namespace SqlSugar ExecuteProcessingSQL(ref sql, parameters); ExecuteBefore(sql, parameters); IDbCommand sqlCommand = GetCommand(sql, parameters); - IDataReader sqlDataReader = sqlCommand.ExecuteReader(this.IsClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default); + IDataReader sqlDataReader = sqlCommand.ExecuteReader(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default); if (isSp) DataReaderParameters = sqlCommand.Parameters; if (this.IsClearParameters) @@ -300,7 +300,7 @@ namespace SqlSugar } finally { - if (this.IsClose()) this.Close(); + if (this.IsAutoClose()) this.Close(); } } public virtual object GetScalar(string sql, params SugarParameter[] parameters) @@ -326,7 +326,7 @@ namespace SqlSugar } finally { - if (this.IsClose()) this.Close(); + if (this.IsAutoClose()) this.Close(); } } #endregion @@ -439,12 +439,9 @@ namespace SqlSugar builder.SqlQueryBuilder.sql.Append(sql); if (parameters != null && parameters.Any()) builder.SqlQueryBuilder.Parameters.AddRange(parameters); - List result = null; - using (var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray())) - { - result = this.DbBind.DataReaderToList(typeof(T), dataReader, builder.SqlQueryBuilder.Fields); - builder.SqlQueryBuilder.Clear(); - } + var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray()); + List result = this.DbBind.DataReaderToList(typeof(T), dataReader, builder.SqlQueryBuilder.Fields); + builder.SqlQueryBuilder.Clear(); if (this.Context.Ado.DataReaderParameters != null) { foreach (IDataParameter item in this.Context.Ado.DataReaderParameters) @@ -459,6 +456,7 @@ namespace SqlSugar } return result; } + public virtual List SqlQuery(string sql, List parameters) { if (parameters != null) @@ -610,7 +608,7 @@ namespace SqlSugar } public virtual void ExecuteAfter(string sql, SugarParameter[] parameters) { - var hasParameter = parameters.IsValuable(); + var hasParameter = parameters.HasValue(); if (hasParameter) { foreach (var outputParameter in parameters.Where(it => it.Direction == ParameterDirection.Output)) @@ -648,7 +646,7 @@ namespace SqlSugar if (parameters == null) return null; return base.GetParameters(parameters, propertyInfo, this.SqlParameterKeyWord); } - private bool IsClose() + private bool IsAutoClose() { return this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Transaction == null; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index ae380a2bc..50e64ec53 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -38,7 +38,7 @@ namespace SqlSugar } public virtual void InitTables(Type[] entityTypes) { - if (entityTypes.IsValuable()) + if (entityTypes.HasValue()) { foreach (var item in entityTypes) { @@ -53,7 +53,7 @@ namespace SqlSugar } public virtual void InitTables(params string[] entitiesNamespaces) { - if (entitiesNamespaces.IsValuable()) + if (entitiesNamespaces.HasValue()) { foreach (var item in entitiesNamespaces) { @@ -79,7 +79,7 @@ namespace SqlSugar var tableName = GetTableName(entityInfo); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); - if (entityInfo.Columns.IsValuable()) + if (entityInfo.Columns.HasValue()) { foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false)) { @@ -96,7 +96,7 @@ namespace SqlSugar } public virtual void ExistLogic(EntityInfo entityInfo) { - if (entityInfo.Columns.IsValuable()) + if (entityInfo.Columns.HasValue()) { Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); @@ -216,7 +216,7 @@ namespace SqlSugar var result = new DbColumnInfo() { TableId = entityInfo.Columns.IndexOf(item), - DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, + DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName, IsPrimarykey = item.IsPrimarykey, IsIdentity = item.IsIdentity, TableName = tableName, diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index 0a3b72753..97bb9bce8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -10,18 +10,12 @@ namespace SqlSugar protected List GetEntityList(SqlSugarClient context, IDataReader dataReader, string fields) { Type type = typeof(T); - var cacheManager = context.Utilities.GetCacheInstance>(); string key = "DataReaderToList." + fields + context.CurrentConnectionConfig.DbType + type.FullName; - IDataReaderEntityBuilder entytyList = null; - if (cacheManager.ContainsKey(key)) + IDataReaderEntityBuilder entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () => { - entytyList = cacheManager[key]; - } - else - { - entytyList =new IDataReaderEntityBuilder(context,dataReader).CreateBuilder(type); - cacheManager.Add(key, entytyList); - } + var cacheResult = new IDataReaderEntityBuilder(context, dataReader).CreateBuilder(type); + return cacheResult; + }); List result = new List(); try { @@ -41,44 +35,41 @@ namespace SqlSugar protected List GetKeyValueList(Type type, IDataReader dataReader) { List reval = new List(); - using (IDataReader re = dataReader) + while (dataReader.Read()) { - while (re.Read()) + if (UtilConstants.DicOO == type) { - if (UtilConstants.DicOO == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0), re.GetValue(1)); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else if (UtilConstants.DicIS == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0).ObjToInt(), re.GetValue(1).ObjToString()); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else if (UtilConstants.Dicii == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0).ObjToInt(), re.GetValue(1).ObjToInt()); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else if (UtilConstants.DicSi == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), re.GetValue(1).ObjToInt()); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else if (UtilConstants.DicSo == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), re.GetValue(1)); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else if (UtilConstants.DicSS == type) - { - var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), dataReader.GetValue(1).ObjToString()); - reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); - } - else - { - Check.Exception(true, ErrorMessage.NotSupportedDictionary); - } + var kv = new KeyValuePair(dataReader.GetValue(0), dataReader.GetValue(1)); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else if (UtilConstants.DicIS == type) + { + var kv = new KeyValuePair(dataReader.GetValue(0).ObjToInt(), dataReader.GetValue(1).ObjToString()); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else if (UtilConstants.Dicii == type) + { + var kv = new KeyValuePair(dataReader.GetValue(0).ObjToInt(), dataReader.GetValue(1).ObjToInt()); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else if (UtilConstants.DicSi == type) + { + var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), dataReader.GetValue(1).ObjToInt()); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else if (UtilConstants.DicSo == type) + { + var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), dataReader.GetValue(1)); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else if (UtilConstants.DicSS == type) + { + var kv = new KeyValuePair(dataReader.GetValue(0).ObjToString(), dataReader.GetValue(1).ObjToString()); + reval.Add((T)Convert.ChangeType(kv, typeof(KeyValuePair))); + } + else + { + Check.Exception(true, ErrorMessage.NotSupportedDictionary); } } return reval; @@ -87,36 +78,33 @@ namespace SqlSugar protected List GetArrayList(Type type, IDataReader dataReader) { List reval = new List(); - using (IDataReader re = dataReader) + int count = dataReader.FieldCount; + var childType = type.GetElementType(); + while (dataReader.Read()) { - int count = dataReader.FieldCount; - var childType = type.GetElementType(); - while (re.Read()) + object[] array = new object[count]; + for (int i = 0; i < count; i++) { - object[] array = new object[count]; - for (int i = 0; i < count; i++) - { - array[i] = Convert.ChangeType(re.GetValue(i), childType); - } - if (childType == UtilConstants.StringType) - reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToString()).ToArray(), type)); - else if (childType == UtilConstants.ObjType) - reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? null : (object)it).ToArray(), type)); - else if (childType == UtilConstants.BoolType) - reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToBool()).ToArray(), type)); - else if (childType == UtilConstants.ByteType) - reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? 0 : (byte)it).ToArray(), type)); - else if (childType == UtilConstants.DecType) - reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToDecimal()).ToArray(), type)); - else if (childType == UtilConstants.GuidType) - reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? Guid.Empty : (Guid)it).ToArray(), type)); - else if (childType == UtilConstants.DateType) - reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? DateTime.MinValue : (DateTime)it).ToArray(), type)); - else if (childType == UtilConstants.IntType) - reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToInt()).ToArray(), type)); - else - Check.Exception(true, ErrorMessage.NotSupportedArray); + array[i] = Convert.ChangeType(dataReader.GetValue(i), childType); } + if (childType == UtilConstants.StringType) + reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToString()).ToArray(), type)); + else if (childType == UtilConstants.ObjType) + reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? null : (object)it).ToArray(), type)); + else if (childType == UtilConstants.BoolType) + reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToBool()).ToArray(), type)); + else if (childType == UtilConstants.ByteType) + reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? 0 : (byte)it).ToArray(), type)); + else if (childType == UtilConstants.DecType) + reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToDecimal()).ToArray(), type)); + else if (childType == UtilConstants.GuidType) + reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? Guid.Empty : (Guid)it).ToArray(), type)); + else if (childType == UtilConstants.DateType) + reval.Add((T)Convert.ChangeType(array.Select(it => it == DBNull.Value ? DateTime.MinValue : (DateTime)it).ToArray(), type)); + else if (childType == UtilConstants.IntType) + reval.Add((T)Convert.ChangeType(array.Select(it => it.ObjToInt()).ToArray(), type)); + else + Check.Exception(true, ErrorMessage.NotSupportedArray); } return reval; } @@ -124,19 +112,24 @@ namespace SqlSugar protected List GetValueTypeList(Type type, IDataReader dataReader) { List reval = new List(); - using (IDataReader re = dataReader) + while (dataReader.Read()) { - while (re.Read()) + var value = dataReader.GetValue(0); + if (type == UtilConstants.GuidType) { - var value = re.GetValue(0); - if (value == DBNull.Value) - { - reval.Add(default(T)); - } - else - { - reval.Add((T)Convert.ChangeType(re.GetValue(0),UtilMethods.GetUnderType(type))); - } + value = Guid.Parse(value.ToString()); + } + if (value == DBNull.Value) + { + reval.Add(default(T)); + } + else if (type.IsEnum) + { + reval.Add((T)Enum.Parse(type,value.ObjToString())); + } + else + { + reval.Add((T)Convert.ChangeType(value, UtilMethods.GetUnderType(type))); } } return reval; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs index 805fd9a6c..7fe1fe2c0 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs @@ -30,12 +30,12 @@ namespace SqlSugar if (csharpTypeName == "Boolean") csharpTypeName = "bool"; var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); - return mappings.IsValuable() ? mappings.First().Key : "varchar"; + return mappings.HasValue() ? mappings.First().Key : "varchar"; } public string GetCsharpTypeName(string dbTypeName) { var mappings = this.MappingTypes.Where(it => it.Key == dbTypeName); - return mappings.IsValuable() ? mappings.First().Key : "string"; + return mappings.HasValue() ? mappings.First().Key : "string"; } public virtual string GetConvertString(string dbTypeName) { @@ -151,11 +151,15 @@ namespace SqlSugar { return "long"; } + else if (dbTypeName == "int16") + { + return "short"; + } else if (propertyTypes == null) { return "other"; } - else if (dbTypeName == "xml") + else if (dbTypeName.IsContainsIn("xml", "string", "String")) { return "string"; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 18c6a4ea0..1cf4e2fb8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -128,7 +128,7 @@ namespace SqlSugar } if (propertyInfo != null && propertyInfo.GetSetMethod() != null) { - if (propertyInfo.PropertyType.IsClass() && propertyInfo.PropertyType != UtilConstants.ByteArrayType) + if (propertyInfo.PropertyType.IsClass() && propertyInfo.PropertyType != UtilConstants.ByteArrayType&&propertyInfo.PropertyType!=UtilConstants.ObjType) { BindClass(generator, result, propertyInfo); } @@ -174,11 +174,7 @@ namespace SqlSugar bool isNullableType = false; MethodInfo method = null; Type bindPropertyType = UtilMethods.GetUnderType(bindProperty, ref isNullableType); - string dbTypeName = DataRecord.GetDataTypeName(ordinal); - if (Regex.IsMatch(dbTypeName, @"\(.+\)")) - { - dbTypeName = Regex.Replace(dbTypeName, @"\(.+\)", ""); - } + string dbTypeName = UtilMethods.GetParenthesesValue(DataRecord.GetDataTypeName(ordinal)); string propertyName = bindProperty.Name; string validPropertyName = bind.GetPropertyTypeName(dbTypeName); validPropertyName = validPropertyName == "byte[]" ? "byteArray" : validPropertyName; @@ -241,7 +237,7 @@ namespace SqlSugar method = getString; if (bindProperyTypeName == "guid") { - method =isNullableType? getConvertStringGuid : getStringGuid; + method = isNullableType ? getConvertStringGuid : getStringGuid; } break; case CSharpDataType.DateTime: @@ -259,7 +255,7 @@ namespace SqlSugar CheckType(bind.DoubleThrow, bindProperyTypeName, validPropertyName, propertyName); if (bindProperyTypeName == "double") method = isNullableType ? getConvertDouble : getDouble; - if(bindProperyTypeName=="single") + if (bindProperyTypeName == "single") method = isNullableType ? getConvertFloat : getFloat; break; case CSharpDataType.Guid: @@ -284,7 +280,7 @@ namespace SqlSugar method = isNullableType ? getConvertInt64 : getInt64; break; case CSharpDataType.DateTimeOffset: - method = isNullableType ? getConvertdatetimeoffset : getdatetimeoffset; + method = isNullableType ? getConvertdatetimeoffset : getdatetimeoffset; if (bindProperyTypeName == "datetime") method = isNullableType ? getConvertdatetimeoffsetDate : getdatetimeoffsetDate; break; @@ -296,6 +292,10 @@ namespace SqlSugar { method = getConvertString; } + if (bindPropertyType == UtilConstants.ObjType) + { + method = getValueMethod; + } if (method == null) method = isNullableType ? getOtherNull.MakeGenericMethod(bindPropertyType) : getOther.MakeGenericMethod(bindPropertyType); generator.Emit(OpCodes.Call, method); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs index 0722f95db..ac46ccdde 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs @@ -264,6 +264,10 @@ namespace SqlSugar { return (T)Convert.ChangeType(dr.GetBoolean(i), type); } + else if (type == UtilConstants.LongType) + { + return (T)Convert.ChangeType(dr.GetInt64(i), type); + } else if (type == UtilConstants.GuidType) { string guidString = dr.GetString(i); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs index ebbbfec57..463f8c5bd 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs @@ -46,7 +46,7 @@ namespace SqlSugar } this.TableInfoList = this.Context.Utilities.TranslateCopy(this.Context.DbMaintenance.GetTableInfoList()); var viewList = this.Context.Utilities.TranslateCopy(this.Context.DbMaintenance.GetViewInfoList()); - if (viewList.IsValuable()) + if (viewList.HasValue()) { this.TableInfoList.AddRange(viewList); } @@ -119,7 +119,7 @@ namespace SqlSugar public IDbFirst Where(params string[] objectNames) { - if (objectNames.IsValuable()) + if (objectNames.HasValue()) { this.TableInfoList = this.TableInfoList.Where(it => objectNames.Contains(it.Name)).ToList(); } @@ -132,71 +132,119 @@ namespace SqlSugar { this.Namespace = nameSpace; Dictionary result = new Dictionary(); - if (this.TableInfoList.IsValuable()) + if (this.TableInfoList.HasValue()) { foreach (var tableInfo in this.TableInfoList) { - var columns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableInfo.Name); - if (this.Context.IgnoreColumns.IsValuable()) { - var entityName = this.Context.EntityMaintenance.GetEntityName(tableInfo.Name); - columns = columns.Where(c => - !this.Context.IgnoreColumns.Any(ig => ig.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase)&&c.DbColumnName==ig.PropertyName) - ).ToList(); - } + string classText = null; string className = tableInfo.Name; - string classText = this.ClassTemplate; - string ConstructorText = IsDefaultValue ? this.ConstructorTemplate : null; - if (this.Context.MappingTables.IsValuable()) - { - var mappingInfo = this.Context.MappingTables.FirstOrDefault(it => it.DbTableName.Equals(tableInfo.Name, StringComparison.CurrentCultureIgnoreCase)); - if (mappingInfo.IsValuable()) - { - className = mappingInfo.EntityName; - } - if (mappingInfo != null) - { - classText = classText.Replace(DbFirstTemplate.KeyClassName, mappingInfo.EntityName); - } - } - classText = classText.Replace(DbFirstTemplate.KeyClassName, className); - classText = classText.Replace(DbFirstTemplate.KeyNamespace, this.Namespace); - classText = classText.Replace(DbFirstTemplate.KeyUsing, IsAttribute ? (this.UsingTemplate + "using " + UtilConstants.AssemblyName + ";\r\n") : this.UsingTemplate); - classText = classText.Replace(DbFirstTemplate.KeyClassDescription, this.ClassDescriptionTemplate.Replace(DbFirstTemplate.KeyClassDescription, tableInfo.Description + "\r\n")); - classText = classText.Replace(DbFirstTemplate.KeySugarTable, IsAttribute ? string.Format(DbFirstTemplate.ValueSugarTable, tableInfo.Name) : null); - if (columns.IsValuable()) - { - foreach (var item in columns) - { - var isLast = columns.Last() == item; - var index = columns.IndexOf(item); - string PropertyText = this.PropertyTemplate; - string PropertyDescriptionText = this.PropertyDescriptionTemplate; - string propertyName = GetPropertyName(item); - string propertyTypeName = GetPropertyTypeName(item); - PropertyText = GetPropertyText(item, PropertyText); - PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText); - PropertyText = PropertyDescriptionText + PropertyText; - classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName))); - if (ConstructorText.IsValuable() && item.DefaultValue!=null) - { - var hasDefaultValue = columns.Skip(index + 1).Any(it=>it.DefaultValue.IsValuable()); - ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyPropertyName, propertyName); - ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyDefaultValue, GetPropertyTypeConvert(item)) + (!hasDefaultValue ? "" : this.ConstructorTemplate); - } - } - } - if (!columns.Any(it => it.DefaultValue != null)) - { - ConstructorText = null; - } - classText = classText.Replace(DbFirstTemplate.KeyConstructor, ConstructorText); - classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); + classText = GetClassString(tableInfo, ref className); result.Remove(className); result.Add(className, classText); } } return result; } + + internal string GetClassString(DbTableInfo tableInfo, ref string className) + { + string classText; + var columns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableInfo.Name); + if (this.Context.IgnoreColumns.HasValue()) + { + var entityName = this.Context.EntityMaintenance.GetEntityName(tableInfo.Name); + columns = columns.Where(c => + !this.Context.IgnoreColumns.Any(ig => ig.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) && c.DbColumnName == ig.PropertyName) + ).ToList(); + } + classText = this.ClassTemplate; + string ConstructorText = IsDefaultValue ? this.ConstructorTemplate : null; + if (this.Context.MappingTables.HasValue()) + { + var mappingInfo = this.Context.MappingTables.FirstOrDefault(it => it.DbTableName.Equals(tableInfo.Name, StringComparison.CurrentCultureIgnoreCase)); + if (mappingInfo.HasValue()) + { + className = mappingInfo.EntityName; + } + if (mappingInfo != null) + { + classText = classText.Replace(DbFirstTemplate.KeyClassName, mappingInfo.EntityName); + } + } + classText = classText.Replace(DbFirstTemplate.KeyClassName, className); + classText = classText.Replace(DbFirstTemplate.KeyNamespace, this.Namespace); + classText = classText.Replace(DbFirstTemplate.KeyUsing, IsAttribute ? (this.UsingTemplate + "using " + UtilConstants.AssemblyName + ";\r\n") : this.UsingTemplate); + classText = classText.Replace(DbFirstTemplate.KeyClassDescription, this.ClassDescriptionTemplate.Replace(DbFirstTemplate.KeyClassDescription, tableInfo.Description + "\r\n")); + classText = classText.Replace(DbFirstTemplate.KeySugarTable, IsAttribute ? string.Format(DbFirstTemplate.ValueSugarTable, tableInfo.Name) : null); + if (columns.HasValue()) + { + foreach (var item in columns) + { + var isLast = columns.Last() == item; + var index = columns.IndexOf(item); + string PropertyText = this.PropertyTemplate; + string PropertyDescriptionText = this.PropertyDescriptionTemplate; + string propertyName = GetPropertyName(item); + string propertyTypeName = GetPropertyTypeName(item); + PropertyText = GetPropertyText(item, PropertyText); + PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText); + PropertyText = PropertyDescriptionText + PropertyText; + classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName))); + if (ConstructorText.HasValue() && item.DefaultValue != null) + { + var hasDefaultValue = columns.Skip(index + 1).Any(it => it.DefaultValue.HasValue()); + ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyPropertyName, propertyName); + ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyDefaultValue, GetPropertyTypeConvert(item)) + (!hasDefaultValue ? "" : this.ConstructorTemplate); + } + } + } + if (!columns.Any(it => it.DefaultValue != null)) + { + ConstructorText = null; + } + classText = classText.Replace(DbFirstTemplate.KeyConstructor, ConstructorText); + classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); + return classText; + } + internal string GetClassString(List columns, ref string className) + { + string classText = this.ClassTemplate; + string ConstructorText = IsDefaultValue ? this.ConstructorTemplate : null; + classText = classText.Replace(DbFirstTemplate.KeyClassName, className); + classText = classText.Replace(DbFirstTemplate.KeyNamespace, this.Namespace); + classText = classText.Replace(DbFirstTemplate.KeyUsing, IsAttribute ? (this.UsingTemplate + "using " + UtilConstants.AssemblyName + ";\r\n") : this.UsingTemplate); + classText = classText.Replace(DbFirstTemplate.KeyClassDescription, this.ClassDescriptionTemplate.Replace(DbFirstTemplate.KeyClassDescription,"\r\n")); + classText = classText.Replace(DbFirstTemplate.KeySugarTable, IsAttribute ? string.Format(DbFirstTemplate.ValueSugarTable, className) : null); + if (columns.HasValue()) + { + foreach (var item in columns) + { + var isLast = columns.Last() == item; + var index = columns.IndexOf(item); + string PropertyText = this.PropertyTemplate; + string PropertyDescriptionText = this.PropertyDescriptionTemplate; + string propertyName = GetPropertyName(item); + string propertyTypeName =item.PropertyName; + PropertyText = GetPropertyText(item, PropertyText); + PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText); + PropertyText = PropertyDescriptionText + PropertyText; + classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName))); + if (ConstructorText.HasValue() && item.DefaultValue != null) + { + var hasDefaultValue = columns.Skip(index + 1).Any(it => it.DefaultValue.HasValue()); + ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyPropertyName, propertyName); + ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyDefaultValue, GetPropertyTypeConvert(item)) + (!hasDefaultValue ? "" : this.ConstructorTemplate); + } + } + } + if (!columns.Any(it => it.DefaultValue != null)) + { + ConstructorText = null; + } + classText = classText.Replace(DbFirstTemplate.KeyConstructor, ConstructorText); + classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); + return classText; + } public void CreateClassFile(string directoryPath, string nameSpace = "Models") { Check.ArgumentNullException(directoryPath, "directoryPath can't null"); @@ -276,7 +324,7 @@ namespace SqlSugar } private string GetPropertyName(DbColumnInfo item) { - if (this.Context.MappingColumns.IsValuable()) + if (this.Context.MappingColumns.HasValue()) { var mappingInfo = this.Context.MappingColumns.SingleOrDefault(it => it.DbColumnName == item.DbColumnName && it.EntityName == GetEnityName(item)); return mappingInfo == null ? item.DbColumnName : mappingInfo.PropertyName; @@ -288,11 +336,18 @@ namespace SqlSugar } private string GetPropertyTypeName(DbColumnInfo item) { - string result = this.Context.Ado.DbBind.GetPropertyTypeName(item.DataType); + string result =item.PropertyType!=null?item.PropertyType.Name:this.Context.Ado.DbBind.GetPropertyTypeName(item.DataType); if (result != "string" && result != "byte[]" && result != "object" && item.IsNullable) { result += "?"; } + if (result == "Int32") { + result = "int"; + } + if (result == "String") + { + result = "string"; + } return result; } private string GetPropertyTypeConvert(DbColumnInfo item) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 36817a8e2..1b2e636f8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -41,12 +41,7 @@ namespace SqlSugar { string cacheKey = "DbMaintenanceProvider.GetIsIdentities" + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); cacheKey = GetCacheKey(cacheKey); - return this.Context.Utilities.GetCacheInstance>().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey,() => { var result = GetColumnInfosByTableName(tableName).Where(it => it.IsIdentity).ToList(); return result.Select(it => it.DbColumnName).ToList(); @@ -56,12 +51,7 @@ namespace SqlSugar { string cacheKey = "DbMaintenanceProvider.GetPrimaries" + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); cacheKey = GetCacheKey(cacheKey); - return this.Context.Utilities.GetCacheInstance>().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey,() => { var result = GetColumnInfosByTableName(tableName).Where(it => it.IsPrimarykey).ToList(); return result.Select(it => it.DbColumnName).ToList(); @@ -216,12 +206,8 @@ namespace SqlSugar #region Private private List GetListOrCache(string cacheKey, string sql) { - return this.Context.Utilities.GetCacheInstance>().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, + () => { var isEnableLogEvent = this.Context.Ado.IsEnableLogEvent; this.Context.Ado.IsEnableLogEvent = false; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 963a2147c..0ac437ac1 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -30,6 +30,10 @@ namespace SqlSugar RestoreMapping(); return Db.ExecuteCommand(sql, paramters); } + public bool ExecuteCommandHasChange() + { + return ExecuteCommand() > 0; + } public Task ExecuteCommandAsync() { Task result = new Task(() => @@ -40,6 +44,16 @@ namespace SqlSugar result.Start(); return result; } + public Task ExecuteCommandHasChangeAsync() + { + Task result = new Task(() => + { + IDeleteable asyncDeleteable = CopyDeleteable(); + return asyncDeleteable.ExecuteCommand() > 0; + }); + result.Start(); + return result; + } public IDeleteable AS(string tableName) { var entityName = typeof(T).Name; @@ -159,6 +173,14 @@ namespace SqlSugar DeleteBuilder.Parameters.AddRange(parameters); return this; } + + public IDeleteable RemoveDataCache() + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCache(cacheService, this.Context.EntityMaintenance.GetTableName()); + return this; + } + public IDeleteable In(List primaryKeyValues) { if (primaryKeyValues == null || primaryKeyValues.Count() == 0) @@ -188,7 +210,7 @@ namespace SqlSugar { if (DeleteBuilder.BigDataInValues == null) DeleteBuilder.BigDataInValues = new List(); - DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues.Select(it=>(object)it)); + DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues.Select(it => (object)it)); DeleteBuilder.BigDataFiled = primaryField; } return this; @@ -228,7 +250,7 @@ namespace SqlSugar } } - private List GetIdentityKeys() + protected virtual List GetIdentityKeys() { if (this.Context.IsSystemTablesConfig) { @@ -248,8 +270,9 @@ namespace SqlSugar } } - private IDeleteable CopyDeleteable() { - var asyncContext = this.Context.Utilities.CopyContext(this.Context,true); + private IDeleteable CopyDeleteable() + { + var asyncContext = this.Context.Utilities.CopyContext(true); asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true; var asyncDeleteable = asyncContext.Deleteable(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs index f3b4019ed..3ae9da45b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs @@ -18,16 +18,12 @@ namespace SqlSugar public EntityInfo GetEntityInfo(Type type) { string cacheKey = "GetEntityInfo" + type.FullName; - return this.Context.Utilities.GetCacheInstance().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, + () => { EntityInfo result = new EntityInfo(); var sugarAttributeInfo = type.GetTypeInfo().GetCustomAttributes(typeof(SugarTable), true).Where(it => it is SugarTable).SingleOrDefault(); - if (sugarAttributeInfo.IsValuable()) + if (sugarAttributeInfo.HasValue()) { var sugarTable = (SugarTable)sugarAttributeInfo; result.DbTableName = sugarTable.TableName; @@ -80,7 +76,7 @@ namespace SqlSugar } public string GetDbColumnName(string propertyName) { - var isAny=this.GetEntityInfo().Columns.Any(it => it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase)); + var isAny = this.GetEntityInfo().Columns.Any(it => it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase)); Check.Exception(!isAny, "Property " + propertyName + " is Invalid"); var typeName = typeof(T).Name; if (this.Context.MappingColumns == null || this.Context.MappingColumns.Count == 0) return propertyName; @@ -106,7 +102,7 @@ namespace SqlSugar return typeof(T).GetProperties().First(it => it.Name == propertyName); } #region Primary key - private static void SetColumns(EntityInfo result) + private void SetColumns(EntityInfo result) { foreach (var property in result.Type.GetProperties()) { @@ -138,12 +134,25 @@ namespace SqlSugar column.OldDbColumnName = sugarColumn.OldColumnName; column.DataType = sugarColumn.ColumnDataType; column.DecimalDigits = sugarColumn.DecimalDigits; + column.OracleSequenceName = sugarColumn.OracleSequenceName; } else { column.IsIgnore = true; } } + if (this.Context.MappingColumns.HasValue()) + { + var golbalMappingInfo = this.Context.MappingColumns.FirstOrDefault(it => it.EntityName.Equals(result.EntityName, StringComparison.CurrentCultureIgnoreCase) && it.PropertyName == column.PropertyName); + if (golbalMappingInfo != null) + column.DbColumnName = golbalMappingInfo.DbColumnName; + } + if (this.Context.IgnoreColumns.HasValue()) + { + var golbalMappingInfo = this.Context.IgnoreColumns.FirstOrDefault(it => it.EntityName.Equals(result.EntityName, StringComparison.CurrentCultureIgnoreCase) && it.PropertyName == column.PropertyName); + if (golbalMappingInfo != null) + column.IsIgnore = true; + } result.Columns.Add(column); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 4e0c1e4ff..60edfe918 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -28,7 +28,7 @@ namespace SqlSugar public bool IsAs { get; set; } #region Core - public int ExecuteCommand() + public virtual int ExecuteCommand() { InsertBuilder.IsReturnIdentity = false; PreToSql(); @@ -37,7 +37,7 @@ namespace SqlSugar return Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); } - public KeyValuePair> ToSql() + public virtual KeyValuePair> ToSql() { InsertBuilder.IsReturnIdentity = true; PreToSql(); @@ -45,7 +45,7 @@ namespace SqlSugar RestoreMapping(); return new KeyValuePair>(sql, InsertBuilder.Parameters); } - public int ExecuteReturnIdentity() + public virtual int ExecuteReturnIdentity() { InsertBuilder.IsReturnIdentity = true; PreToSql(); @@ -53,7 +53,7 @@ namespace SqlSugar RestoreMapping(); return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); } - public long ExecuteReturnBigIdentity() + public virtual long ExecuteReturnBigIdentity() { InsertBuilder.IsReturnIdentity = true; PreToSql(); @@ -61,12 +61,12 @@ namespace SqlSugar RestoreMapping(); return Convert.ToInt64( Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray())); } - public T ExecuteReturnEntity() + public virtual T ExecuteReturnEntity() { ExecuteCommandIdentityIntoEntity(); return InsertObjs.First(); } - public bool ExecuteCommandIdentityIntoEntity() + public virtual bool ExecuteCommandIdentityIntoEntity() { var result = InsertObjs.First(); var identityKeys = GetIdentityKeys(); @@ -147,7 +147,7 @@ namespace SqlSugar public IInsertable IgnoreColumns(Expression> columns) { var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); - this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.PropertyName)).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))).ToList(); return this; } public IInsertable IgnoreColumns(Func ignoreColumMethod) @@ -159,7 +159,7 @@ namespace SqlSugar public IInsertable InsertColumns(Expression> columns) { var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); - this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName)).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Any(ig=>ig.Equals(it.PropertyName,StringComparison.CurrentCultureIgnoreCase))).ToList(); return this; } @@ -184,10 +184,17 @@ namespace SqlSugar this.InsertBuilder.IsNoInsertNull = isNoInsertNull; return this; } + + public IInsertable RemoveDataCache() + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCache(cacheService, this.Context.EntityMaintenance.GetTableName()); + return this; + } #endregion - #region Private Methods - private void PreToSql() + #region Protected Methods + protected virtual void PreToSql() { #region Identities if (!IsOffIdentity) @@ -255,7 +262,7 @@ namespace SqlSugar ++i; } } - private string GetDbColumnName(string entityName) + protected string GetDbColumnName(string entityName) { if (!IsMappingColumns) { @@ -276,7 +283,7 @@ namespace SqlSugar } } - private List GetPrimaryKeys() + protected virtual List GetPrimaryKeys() { if (this.Context.IsSystemTablesConfig) { @@ -287,7 +294,7 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); } } - private List GetIdentityKeys() + protected virtual List GetIdentityKeys() { if (this.Context.IsSystemTablesConfig) { @@ -298,16 +305,16 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.DbColumnName).ToList(); } } - private void RestoreMapping() + protected void RestoreMapping() { if (IsAs) { this.Context.MappingTables = OldMappingTableList; } } - private IInsertable CopyInsertable() + protected IInsertable CopyInsertable() { - var asyncContext = this.Context.Utilities.CopyContext(this.Context,true); + var asyncContext = this.Context.Utilities.CopyContext(true); asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true; var asyncInsertable = asyncContext.Insertable(this.InsertObjs); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 479a8b18f..d49663ab4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -22,6 +22,8 @@ namespace SqlSugar public ISqlBuilder SqlBuilder { get; set; } public MappingTableList OldMappingTableList { get; set; } public MappingTableList QueryableMappingTableList { get; set; } + public bool IsCache { get; set; } + public int CacheTime { get; set; } public bool IsAs { get; set; } public QueryBuilder QueryBuilder { @@ -115,10 +117,18 @@ namespace SqlSugar } public virtual ISugarQueryable Where(string whereString, object whereObj = null) { - if (whereString.IsValuable()) + if (whereString.HasValue()) this.Where(whereString, whereObj); return this; } + + public virtual ISugarQueryable Where(List conditionalModels) + { + if (conditionalModels.IsNullOrEmpty()) return this; + var sqlObj = this.Context.Utilities.ConditionalModelToSql(conditionalModels); + return this.Where(sqlObj.Key, sqlObj.Value); + } + public virtual ISugarQueryable Where(string whereString, object whereObj = null) { var whereValue = QueryBuilder.WhereInfos; @@ -277,6 +287,21 @@ namespace SqlSugar return this; } + public virtual ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds) + { + if (isOrderBy) + return this.OrderBy(orderFileds); + else + return this; + } + public virtual ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + return this.OrderBy(expression, type); + else + return this; + } + public virtual ISugarQueryable GroupBy(string groupFileds) { var croupByValue = QueryBuilder.GroupByValue; @@ -364,7 +389,7 @@ namespace SqlSugar QueryBuilder.Skip = 0; QueryBuilder.Take = 1; var reval = this.ToList(); - if (reval.IsValuable()) + if (reval.HasValue()) { return reval.FirstOrDefault(); } @@ -413,24 +438,35 @@ namespace SqlSugar public virtual ISugarQueryable MergeTable() { Check.Exception(this.QueryBuilder.SelectValue.IsNullOrEmpty(), "MergeTable need to use Select(it=>new{}) Method ."); - Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0, "MergeTable Queryable cannot Take Skip OrderBy PageToList "); + Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0 || this.QueryBuilder.OrderByValue.HasValue(), "MergeTable Queryable cannot Take Skip OrderBy PageToList "); var sql = QueryBuilder.ToSqlString(); var tableName = this.SqlBuilder.GetPackTable(sql, "MergeTable"); - return this.Context.Queryable().AS(tableName).Select("*"); + var mergeQueryable = this.Context.Queryable(); + mergeQueryable.QueryBuilder.Parameters = QueryBuilder.Parameters; + mergeQueryable.QueryBuilder.WhereIndex = QueryBuilder.WhereIndex + 1; + mergeQueryable.QueryBuilder.JoinIndex = QueryBuilder.JoinIndex + 1; + return mergeQueryable.AS(tableName).Select("*"); } public virtual int Count() { InitMapping(); QueryBuilder.IsCount = true; - var sql = string.Empty; - sql = QueryBuilder.ToSqlString(); - sql = QueryBuilder.ToCountSql(sql); - var reval = Context.Ado.GetInt(sql, QueryBuilder.Parameters.ToArray()); + int result = 0; + if (IsCache) + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + result = CacheSchemeMain.GetOrCreate(cacheService, this.QueryBuilder, () => { return GetCount(); }, CacheTime, this.Context); + } + else + { + result = GetCount(); + } RestoreMapping(); QueryBuilder.IsCount = false; - return reval; + return result; } + public virtual int Count(Expression> expression) { _Where(expression); @@ -507,7 +543,7 @@ namespace SqlSugar { if (pageIndex == 0) pageIndex = 1; - if (QueryBuilder.PartitionByValue.IsValuable()) + if (QueryBuilder.PartitionByValue.HasValue()) { QueryBuilder.ExternalPageIndex = pageIndex; QueryBuilder.ExternalPageSize = pageSize; @@ -537,7 +573,7 @@ namespace SqlSugar { if (pageIndex == 0) pageIndex = 1; - if (QueryBuilder.PartitionByValue.IsValuable()) + if (QueryBuilder.PartitionByValue.HasValue()) { QueryBuilder.ExternalPageIndex = pageIndex; QueryBuilder.ExternalPageSize = pageSize; @@ -553,11 +589,17 @@ namespace SqlSugar { _RestoreMapping = false; List result = null; - totalNumber = this.Count(); - if (totalNumber == 0) - result = new List(); - else - result = ToPageList(pageIndex, pageSize); + int count = this.Count(); + QueryBuilder.IsDisabledGobalFilter = UtilMethods.GetOldValue(QueryBuilder.IsDisabledGobalFilter, () => + { + QueryBuilder.IsDisabledGobalFilter = true; + if (count == 0) + result = new List(); + else + result = ToPageList(pageIndex, pageSize); + + }); + totalNumber = count; _RestoreMapping = true; return result; } @@ -569,7 +611,38 @@ namespace SqlSugar RestoreMapping(); return new KeyValuePair>(sql, QueryBuilder.Parameters); } - + public ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + Check.ArgumentNullException(this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService, "Use Cache ConnectionConfig.ConfigureExternalServices.DataInfoCacheService is required "); + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } + public string ToClassString(string className) + { + List columns = new List(); + var properties = typeof(T).GetProperties(); + foreach (var item in properties) + { + columns.Add(new DbColumnInfo() + { + DbColumnName = item.Name, + PropertyName = UtilMethods.GetUnderType(item.PropertyType).Name, + PropertyType = UtilMethods.GetUnderType(item.PropertyType) + }); + } + var result = ((this.Context.DbFirst) as DbFirstProvider).GetClassString(columns, ref className); + return result; + } #region Async methods public Task SingleAsync() { @@ -930,7 +1003,7 @@ namespace SqlSugar protected void _Filter(string FilterName, bool isDisabledGobalFilter) { QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter; - if (this.Context.QueryFilter.GeFilterList.IsValuable() && FilterName.IsValuable()) + if (this.Context.QueryFilter.GeFilterList.HasValue() && FilterName.HasValue()) { var list = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName == FilterName && it.IsJoinQuery == !QueryBuilder.IsSingle()); foreach (var item in list) @@ -971,31 +1044,57 @@ namespace SqlSugar { List result = null; var sqlObj = this.ToSql(); - var isComplexModel = QueryBuilder.IsComplexModel(sqlObj.Key); - var entityType = typeof(TResult); - using (var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray())) + if (IsCache) { - if (typeof(TResult) == typeof(ExpandoObject)) - { - return this.Context.Utilities.DataReaderToExpandoObjectList(dataReader) as List; - } - if (entityType.IsAnonymousType() || isComplexModel) - { - result = this.Context.Utilities.DataReaderToDynamicList(dataReader); - } - else - { - result = this.Bind.DataReaderToList(entityType, dataReader, QueryBuilder.SelectCacheKey); - } + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + result = CacheSchemeMain.GetOrCreate>(cacheService, this.QueryBuilder, () => { return GetData(sqlObj); }, CacheTime, this.Context); + } + else + { + result = GetData(sqlObj); } RestoreMapping(); + return result; + } + protected int GetCount() + { + var sql = string.Empty; + sql = QueryBuilder.ToSqlString(); + sql = QueryBuilder.ToCountSql(sql); + var reval = Context.Ado.GetInt(sql, QueryBuilder.Parameters.ToArray()); + return reval; + } + + protected List GetData(KeyValuePair> sqlObj) + { + List result; + var isComplexModel = QueryBuilder.IsComplexModel(sqlObj.Key); + var entityType = typeof(TResult); + var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray()); + if (entityType == UtilConstants.DynamicType) + { + result = this.Context.Utilities.DataReaderToExpandoObjectList(dataReader) as List; + } + else if (entityType == UtilConstants.ObjType) + { + result = this.Context.Utilities.DataReaderToExpandoObjectList(dataReader).Select(it => ((TResult)(object)it)).ToList(); + } + else if (entityType.IsAnonymousType() || isComplexModel) + { + result = this.Context.Utilities.DataReaderToDynamicList(dataReader); + } + else + { + result = this.Bind.DataReaderToList(entityType, dataReader, QueryBuilder.SelectCacheKey); + } SetContextModel(result, entityType); return result; } + protected void _InQueryable(Expression> expression, KeyValuePair> sqlObj) { string sql = sqlObj.Key; - if (sqlObj.Value.IsValuable()) + if (sqlObj.Value.HasValue()) { this.SqlBuilder.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), 100); this.QueryBuilder.Parameters.AddRange(sqlObj.Value); @@ -1019,7 +1118,7 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); } } - protected List GetIdentityKeys() + protected virtual List GetIdentityKeys() { if (this.Context.IsSystemTablesConfig) { @@ -1046,14 +1145,14 @@ namespace SqlSugar private void SetContextModel(List result, Type entityType) { - if (result.IsValuable()) + if (result.HasValue()) { - if (entityType.GetTypeInfo().BaseType.IsValuable() && entityType.GetTypeInfo().BaseType == UtilConstants.ModelType) + if (entityType.GetTypeInfo().BaseType.HasValue() && entityType.GetTypeInfo().BaseType == UtilConstants.ModelType) { foreach (var item in result) { var contextProperty = item.GetType().GetProperty("Context"); - SqlSugarClient newClient = this.Context.Utilities.CopyContext(this.Context); + SqlSugarClient newClient = this.Context.Utilities.CopyContext(); contextProperty.SetValue(item, newClient, null); } } @@ -1061,7 +1160,7 @@ namespace SqlSugar } private ISugarQueryable CopyQueryable() { - var asyncContext = this.Context.Utilities.CopyContext(this.Context, true); + var asyncContext = this.Context.Utilities.CopyContext(true); asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true; var asyncQueryable = asyncContext.Queryable().Select(string.Empty); @@ -1116,6 +1215,11 @@ namespace SqlSugar Where(whereString, whereObj); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, string whereString, object whereObj) { @@ -1134,6 +1238,11 @@ namespace SqlSugar #endregion #region Order + public new ISugarQueryable OrderBy(string orderFileds) + { + base.OrderBy(orderFileds); + return this; + } public ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc) { _OrderBy(expression, type); @@ -1145,6 +1254,24 @@ namespace SqlSugar _OrderBy(expression, type); return this; } + public new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds) + { + if (isOrderBy) + base.OrderBy(orderFileds); + return this; + } + public new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } #endregion #region GroupBy @@ -1255,11 +1382,26 @@ namespace SqlSugar }); return this; } - public new ISugarQueryable With(string withString) + public new ISugarQueryable With(string withString) { base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -1302,6 +1444,30 @@ namespace SqlSugar _OrderBy(expression, type); return this; } + public new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds) + { + if (isOrderBy) + base.OrderBy(orderFileds); + return this; + } + public new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } #endregion #region Select @@ -1334,6 +1500,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -1415,7 +1586,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -1469,6 +1640,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -1496,6 +1682,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -1575,6 +1766,36 @@ namespace SqlSugar _OrderBy(expression, type); return this; } + public new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds) + { + if (isOrderBy) + base.OrderBy(orderFileds); + return this; + } + public new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } #endregion #region GroupBy @@ -1645,7 +1866,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -1699,6 +1920,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -1731,6 +1967,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -1826,6 +2067,42 @@ namespace SqlSugar _OrderBy(expression, type); return this; } + public new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds) + { + if (isOrderBy) + base.OrderBy(orderFileds); + return this; + } + public new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } + public ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc) + { + if (isOrderBy) + _OrderBy(expression, type); + return this; + } #endregion #region GroupBy @@ -1901,7 +2178,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -1955,6 +2232,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -1992,6 +2284,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -2183,7 +2480,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -2237,6 +2534,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -2279,6 +2591,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -2492,7 +2809,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -2546,6 +2863,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -2593,6 +2925,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -2827,7 +3164,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -2881,6 +3218,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -2939,6 +3291,12 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } + public ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -3185,7 +3543,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -3234,11 +3592,26 @@ namespace SqlSugar }); return this; } - public new ISugarQueryable With(string withString) + public new ISugarQueryable With(string withString) { base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -3296,6 +3669,12 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } + public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { if (isWhere) @@ -3567,7 +3946,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -3621,6 +4000,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -3689,6 +4083,11 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } public ISugarQueryable WhereIF(bool isWhere, Expression> expression) { @@ -3974,7 +4373,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -4028,6 +4427,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion @@ -4095,6 +4509,12 @@ namespace SqlSugar _Where(expression); return this; } + public new ISugarQueryable Where(List conditionalModels) + { + base.Where(conditionalModels); + return this; + } + public new ISugarQueryable WhereIF(bool isWhere, Expression> expression) { if (isWhere) @@ -4406,7 +4826,7 @@ namespace SqlSugar #endregion #region Other - public new ISugarQueryable AS(string tableName) + public new ISugarQueryable AS(string tableName) { var entityName = typeof(AsT).Name; _As(tableName, entityName); @@ -4460,6 +4880,21 @@ namespace SqlSugar base.With(withString); return this; } + public new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + return this; + } + public new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) + { + if (IsCache) + { + this.IsCache = true; + this.CacheTime = cacheDurationInSeconds; + } + return this; + } #endregion } #endregion diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs index 4dc31dc19..bfd9ca868 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs @@ -84,7 +84,7 @@ namespace SqlSugar { var result = Builder.GetTranslationTableName(EntityInfo.EntityName); result += UtilConstants.Space; - if (this.TableWithString.IsValuable()) + if (this.TableWithString.HasValue()) { result += TableWithString + UtilConstants.Space; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs index d57d96aae..0fcb158a2 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs @@ -28,6 +28,7 @@ namespace SqlSugar public bool IsNoInsertNull { get; set; } public bool IsReturnIdentity { get; set; } public EntityInfo EntityInfo { get; set; } + public Dictionary OracleSeqInfoList { get; set; } #endregion #region SqlTemplate @@ -87,7 +88,7 @@ namespace SqlSugar { var result = Builder.GetTranslationTableName(EntityInfo.EntityName); result += UtilConstants.Space; - if (this.TableWithString.IsValuable()) + if (this.TableWithString.HasValue()) { result += TableWithString + UtilConstants.Space; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index bbf4bcf92..25a9e3dbe 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -226,7 +226,7 @@ namespace SqlSugar resolveExpress.Resolve(expression, resolveType); this.Parameters.AddRange(resolveExpress.Parameters); var reval = resolveExpress.Result; - var isSingleTableHasSubquery = IsSingle() && resolveExpress.SingleTableNameSubqueryShortName.IsValuable(); + var isSingleTableHasSubquery = IsSingle() && resolveExpress.SingleTableNameSubqueryShortName.HasValue(); if (isSingleTableHasSubquery) { Check.Exception(!string.IsNullOrEmpty(this.TableShortName) && resolveExpress.SingleTableNameSubqueryShortName != this.TableShortName, "{0} and {1} need same name"); this.TableShortName = resolveExpress.SingleTableNameSubqueryShortName; @@ -241,14 +241,14 @@ namespace SqlSugar AppendFilter(); sql = new StringBuilder(); if (this.OrderByValue == null && (Skip != null || Take != null)) this.OrderByValue = " ORDER BY GetDate() "; - if (this.PartitionByValue.IsValuable()) + if (this.PartitionByValue.HasValue()) { this.OrderByValue = this.PartitionByValue + this.OrderByValue; } var isRowNumber = Skip != null || Take != null; var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString); string groupByValue = GetGroupByString + HavingInfos; - string orderByValue = (!isRowNumber && this.OrderByValue.IsValuable()) ? GetOrderByString : null; + string orderByValue = (!isRowNumber && this.OrderByValue.HasValue()) ? GetOrderByString : null; if (isIgnoreOrderBy) { orderByValue = null; } sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, groupByValue, orderByValue); sql.Replace(UtilConstants.ReplaceKey, isRowNumber ? (isIgnoreOrderBy ? null : rowNumberString) : null); @@ -269,7 +269,7 @@ namespace SqlSugar public virtual void AppendFilter() { - if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.IsValuable()) + if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.HasValue()) { var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList(); foreach (var item in gobalFilterList.Where(it => it.IsJoinQuery == !IsSingle())) @@ -277,7 +277,7 @@ namespace SqlSugar var filterResult = item.FilterValue(this.Context); WhereInfos.Add(this.Builder.AppendWhereOrAnd(this.WhereInfos.IsNullOrEmpty(), filterResult.Sql)); var filterParamters = this.Context.Ado.GetParameters(filterResult.Parameters); - if (filterParamters.IsValuable()) + if (filterParamters.HasValue()) { this.Parameters.AddRange(filterParamters); } @@ -384,7 +384,7 @@ namespace SqlSugar if (this.SelectValue.IsNullOrEmpty()) { string pre = null; - if (this.JoinQueryInfos.IsValuable() && this.JoinQueryInfos.Any(it => TableShortName.IsValuable())) + if (this.JoinQueryInfos.HasValue() && this.JoinQueryInfos.Any(it => TableShortName.HasValue())) { pre = Builder.GetTranslationColumnName(TableShortName) + "."; } @@ -426,11 +426,11 @@ namespace SqlSugar { var result = Builder.GetTranslationTableName(EntityName); result += UtilConstants.Space; - if (this.TableShortName.IsValuable()) + if (this.TableShortName.HasValue()) { result += (TableShortName + UtilConstants.Space); } - if (this.TableWithString.IsValuable()) + if (this.TableWithString.HasValue()) { result += TableWithString + UtilConstants.Space; } @@ -441,7 +441,7 @@ namespace SqlSugar if (this.EasyJoinInfos.IsValuable()) { - if (this.TableWithString.IsValuable()) + if (this.TableWithString.HasValue()) { result += "," + string.Join(",", this.EasyJoinInfos.Select(it => string.Format("{0} {1} {2} ", GetTableName(it.Value), it.Key, TableWithString))); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs index d26ad951c..692f1b064 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs @@ -93,7 +93,7 @@ namespace SqlSugar { var result = Builder.GetTranslationTableName(TableName); result += UtilConstants.Space; - if (this.TableWithString.IsValuable()) + if (this.TableWithString.HasValue()) { result += TableWithString + UtilConstants.Space; } @@ -181,7 +181,7 @@ namespace SqlSugar pageIndex++; updateTable.Append("\r\n"); string whereString = null; - if (this.WhereValues.IsValuable()) + if (this.WhereValues.HasValue()) { foreach (var item in WhereValues) { @@ -190,7 +190,7 @@ namespace SqlSugar whereString += item; } } - else if (PrimaryKeys.IsValuable()) + else if (PrimaryKeys.HasValue()) { foreach (var item in PrimaryKeys) { @@ -210,7 +210,7 @@ namespace SqlSugar { if (SetValues.IsValuable()) { - var setValue = SetValues.Where(sv => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName)); + var setValue = SetValues.Where(sv => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName)|| sv.Key==Builder.GetTranslationColumnName(it.PropertyName)); if (setValue != null && setValue.Any()) { return setValue.First().Value; @@ -220,7 +220,7 @@ namespace SqlSugar return result; })); string whereString = null; - if (this.WhereValues.IsValuable()) + if (this.WhereValues.HasValue()) { foreach (var item in WhereValues) { @@ -229,7 +229,7 @@ namespace SqlSugar whereString += item; } } - else if (PrimaryKeys.IsValuable()) + else if (PrimaryKeys.HasValue()) { foreach (var item in PrimaryKeys) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index cd0ef0fdb..f41bc731c 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -33,6 +33,10 @@ namespace SqlSugar RestoreMapping(); return this.Ado.ExecuteCommand(sql, UpdateBuilder.Parameters == null ? null : UpdateBuilder.Parameters.ToArray()); } + public bool ExecuteCommandHasChange() + { + return this.ExecuteCommand() > 0; + } public Task ExecuteCommandAsync() { Task result = new Task(() => @@ -43,6 +47,16 @@ namespace SqlSugar result.Start(); return result; } + public Task ExecuteCommandHasChangeAsync() + { + Task result = new Task(() => + { + IUpdateable asyncUpdateable = CopyUpdateable(); + return asyncUpdateable.ExecuteCommand()>0; + }); + result.Start(); + return result; + } public IUpdateable AS(string tableName) { var entityName = typeof(T).Name; @@ -111,7 +125,7 @@ namespace SqlSugar item.IsPrimarykey = true; } } - this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumns.Contains(it.PropertyName) || it.IsPrimarykey || it.IsIdentity).ToList(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumns.Any(uc=>uc.Equals(it.PropertyName,StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey || it.IsIdentity).ToList(); return this; } @@ -134,7 +148,7 @@ namespace SqlSugar var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update); var resultArray = expResult.GetResultArray(); Check.ArgumentNullException(resultArray, "UpdateColumns Parameter error, UpdateColumns(it=>new T{ it.id=1}) is valid, UpdateColumns(it=>T) is error"); - if (resultArray.IsValuable()) + if (resultArray.HasValue()) { foreach (var item in resultArray) { @@ -142,7 +156,7 @@ namespace SqlSugar UpdateBuilder.SetValues.Add(new KeyValuePair(SqlBuilder.GetTranslationColumnName(key), item)); } } - this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key) == it.DbColumnName) || it.IsPrimarykey == true).ToList(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName,StringComparison.CurrentCultureIgnoreCase)|| SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName,StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); return this; } @@ -160,6 +174,7 @@ namespace SqlSugar UpdateBuilder.WhereValues.Add(expResult.GetResultString()); return this; } + public IUpdateable With(string lockString) { if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) @@ -167,6 +182,13 @@ namespace SqlSugar return this; } + public IUpdateable RemoveDataCache() + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + CacheSchemeMain.RemoveCache(cacheService, this.Context.EntityMaintenance.GetTableName()); + return this; + } + internal void Init() { this.UpdateBuilder.TableName = EntityInfo.EntityName; @@ -221,6 +243,9 @@ namespace SqlSugar foreach (var item in this.UpdateBuilder.DbColumnInfoList) { if (this.UpdateBuilder.Parameters == null) this.UpdateBuilder.Parameters = new List(); + if (this.UpdateBuilder.SetValues.Any(it =>this.SqlBuilder.GetNoTranslationColumnName(it.Key) == item.PropertyName)) { + continue; + } this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value, item.PropertyType)); } } @@ -251,7 +276,7 @@ namespace SqlSugar } }); } - if (this.UpdateBuilder.Parameters.IsValuable() && this.UpdateBuilder.SetValues.IsValuable()) + if (this.UpdateBuilder.Parameters.HasValue() && this.UpdateBuilder.SetValues.IsValuable()) { this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v => (SqlBuilder.SqlParameterKeyWord + SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName)); } @@ -278,7 +303,7 @@ namespace SqlSugar } private List GetPrimaryKeys() { - if (this.WhereColumnList.IsValuable()) + if (this.WhereColumnList.HasValue()) { return this.WhereColumnList; } @@ -291,7 +316,7 @@ namespace SqlSugar return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); } } - private List GetIdentityKeys() + protected virtual List GetIdentityKeys() { if (this.Context.IsSystemTablesConfig) { @@ -311,7 +336,7 @@ namespace SqlSugar } private IUpdateable CopyUpdateable() { - var asyncContext = this.Context.Utilities.CopyContext(this.Context,true); + var asyncContext = this.Context.Utilities.CopyContext(true); asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true; var asyncUpdateable = asyncContext.Updateable(this.UpdateObjs); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs new file mode 100644 index 000000000..80508c5b6 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheKeyBuider.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + internal class CacheKeyBuider + { + public static CacheKey GetKey(SqlSugarClient context, QueryBuilder queryBuilder) + { + CacheKey result = new CacheKey(); + result.Database = context.Context.Ado.Connection.Database; + AddTables(context, queryBuilder, result); + AddIdentificationList(queryBuilder, result); + return result; + } + + private static void AddIdentificationList(QueryBuilder queryBuilder, CacheKey result) + { + result.IdentificationList = new List(); + result.IdentificationList.Add(queryBuilder.GetTableNameString); + result.IdentificationList.Add(queryBuilder.GetJoinValueString); + result.IdentificationList.Add(queryBuilder.GetOrderByString); + result.IdentificationList.Add(queryBuilder.GetGroupByString); + result.IdentificationList.Add(queryBuilder.GetWhereValueString); + result.IdentificationList.Add(queryBuilder.PartitionByValue); + result.IdentificationList.Add(queryBuilder.Take.ObjToString()); + result.IdentificationList.Add(queryBuilder.Skip.ObjToString()); + if (queryBuilder.Parameters.HasValue()) + { + foreach (var item in queryBuilder.Parameters) + { + result.IdentificationList.Add(item.ParameterName + "_" + item.Value); + } + } + } + + private static void AddTables(SqlSugarClient context, QueryBuilder queryBuilder, CacheKey result) + { + result.Tables = new List(); + result.Tables.Add(context.EntityMaintenance.GetTableName(queryBuilder.EntityName)); + if (queryBuilder.EasyJoinInfos.HasValue()) + { + foreach (var item in queryBuilder.EasyJoinInfos) + { + result.Tables.Add(context.EntityMaintenance.GetTableName(item.Value)); + } + } + if (queryBuilder.JoinQueryInfos.HasValue()) + { + foreach (var item in queryBuilder.JoinQueryInfos) + { + result.Tables.Add(queryBuilder.Builder.GetNoTranslationColumnName(item.TableName)); + } + } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs new file mode 100644 index 000000000..449dfd5b3 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/CacheScheme/CacheSchemeMain.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + internal class CacheSchemeMain + { + public static T GetOrCreate(ICacheService cacheService, QueryBuilder queryBuilder, Func getData, int cacheDurationInSeconds, SqlSugarClient context) + { + CacheKey key = CacheKeyBuider.GetKey(context, queryBuilder); + string keyString = key.ToString(); + var result = cacheService.GetOrCreate(keyString, getData, cacheDurationInSeconds); + return result; + } + + public static void RemoveCache(ICacheService cacheService, string tableName) + { + var keys = cacheService.GetAllKey(); + if (keys.HasValue()) + { + foreach (var item in keys) + { + if (item.ToLower().Contains(UtilConstants.Dot + tableName.ToLower() + UtilConstants.Dot)) + { + cacheService.Remove(item); + } + } + } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/CacheKey.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/CacheKey.cs new file mode 100644 index 000000000..40cd87ade --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/CacheKey.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class CacheKey + { + public string Database { get; set; } + public List Tables { get; set; } + public List IdentificationList { get; set; } + public new string ToString() + { + return "SqlSugarDataCache" + UtilConstants.Dot + string.Join(UtilConstants.Dot, this.Tables) +UtilConstants.Dot+ string.Join(UtilConstants.Dot, this.IdentificationList.Where(it=>it.HasValue())); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs new file mode 100644 index 000000000..5593dfb19 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class ConditionalModel + { + public ConditionalModel() + { + this.ConditionalType = ConditionalType.Equal; + } + public string FieldName { get; set; } + public string FieldValue { get; set; } + public ConditionalType ConditionalType { get; set; } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConnectionConfig.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConnectionConfig.cs index 006a693c3..31e25eb64 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConnectionConfig.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConnectionConfig.cs @@ -23,5 +23,54 @@ namespace SqlSugar /// Default SystemTable,If you do not have system table permissions, use attribute /// public InitKeyType InitKeyType = InitKeyType.SystemTable; + /// + /// Configure External Services replace default services,For example, Redis storage + /// + public ConfigureExternalServices ConfigureExternalServices = _DefaultServices; + private static ConfigureExternalServices _DefaultServices = new ConfigureExternalServices(); + } + + public class ConfigureExternalServices + { + + private ISerializeService _SerializeService; + private ICacheService _ReflectionInoCache; + private ICacheService _DataInfoCache; + + public ISerializeService SerializeService + { + get + { + if (_SerializeService == null) + return DefaultServices.Serialize; + else + return _SerializeService; + } + set{ _SerializeService = value;} + } + + public ICacheService ReflectionInoCacheService + { + get + { + if (_ReflectionInoCache == null) + return DefaultServices.ReflectionInoCache; + else + return _ReflectionInoCache; + } + set{_ReflectionInoCache = value;} + } + + public ICacheService DataInfoCacheService + { + get + { + if (_DataInfoCache == null) + return DefaultServices.DataInoCache; + else + return _DataInfoCache; + } + set { _DataInfoCache = value; } + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DefaultServices.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DefaultServices.cs new file mode 100644 index 000000000..dedca8d55 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DefaultServices.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class DefaultServices + { + public static ICacheService ReflectionInoCache= new ReflectionInoCacheService(); + public static ICacheService DataInoCache = null; + public static ISerializeService Serialize= new SerializeService(); + } +} \ No newline at end of file diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs index 8405c85ad..3fd7d3f3b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs @@ -24,5 +24,6 @@ namespace SqlSugar public bool IsIgnore { get; set; } public string DataType { get; set; } public int DecimalDigits { get; set; } + public string OracleSequenceName { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index e7e9ac375..8aa03c482 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs @@ -92,6 +92,12 @@ namespace SqlSugar get { return _DecimalDigits; } set { _DecimalDigits = value; } } + + private string _OracleSequenceName; + public string OracleSequenceName { + get { return _OracleSequenceName; } + set { _OracleSequenceName = value; } + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ConditionalType.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ConditionalType.cs new file mode 100644 index 000000000..2a4a691b5 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ConditionalType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public enum ConditionalType + { + Equal=0, + Like=1, + GreaterThan =2, + GreaterThanOrEqual = 3, + LessThan=4, + LessThanOrEqual = 5 + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ProperyType.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ProperyType.cs index 05f50674e..525d25253 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ProperyType.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Enum/ProperyType.cs @@ -23,6 +23,7 @@ namespace SqlSugar @byteArray, @float, @time, - @DateTimeOffset + @DateTimeOffset, + @Single } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs index beab94221..39638e445 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs @@ -40,7 +40,7 @@ namespace SqlSugar { get { - return BaseParameter.CommonTempData.IsValuable() && BaseParameter.CommonTempData.Equals(CommonTempDataType.Result); + return BaseParameter.CommonTempData.HasValue() && BaseParameter.CommonTempData.Equals(CommonTempDataType.Result); } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs index afe596dc9..228d2050b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs @@ -110,7 +110,7 @@ namespace SqlSugar public void Append(object parameter) { - if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) + if (this.CurrentParameter.HasValue() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) { this.CurrentParameter.CommonTempData = parameter; return; @@ -140,7 +140,7 @@ namespace SqlSugar public void AppendFormat(string parameter, params object[] orgs) { - if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) + if (this.CurrentParameter.HasValue() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) { this.CurrentParameter.CommonTempData = new KeyValuePair(parameter, orgs); return; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index b39da6e2a..fae3ce837 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -58,7 +58,7 @@ namespace SqlSugar public static bool IsLogicOperator(string operatorValue) { - return operatorValue == "&&" || operatorValue == "||"; + return operatorValue == "&&" || operatorValue == "||"||operatorValue == "AND" || operatorValue == "OR"; } public static bool IsLogicOperator(Expression expression) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index d6edde71e..bdfc85e6a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -83,11 +83,14 @@ namespace SqlSugar { inValueString = inValues.ToArray().ToJoinSqlInVals(); } - else + if (inValueString.IsNullOrEmpty()) { return " (1=2) "; } - return string.Format(" ({0} IN ({1})) ", value, inValueString); + else + { + return string.Format(" ({0} IN ({1})) ", value, inValueString); + } } public virtual string Equals(MethodCallExpressionModel model) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index 4da350ffe..463fd2867 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -15,7 +15,7 @@ namespace SqlSugar } public static bool HasValue(object thisValue) { - return thisValue.IsValuable(); + return thisValue.HasValue(); } public static bool IsNullOrEmpty(object thisValue) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ExpressionContext.cs index ee0eaa8ac..ee8b591a3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ExpressionContext.cs @@ -130,7 +130,7 @@ namespace SqlSugar { Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name")); if (IsTranslationText(entityName)) return entityName; - isMapping = isMapping && this.MappingTables.IsValuable(); + isMapping = isMapping && this.MappingTables.HasValue(); var isComplex = entityName.Contains(UtilConstants.Dot); if (isMapping && isComplex) { @@ -175,7 +175,7 @@ namespace SqlSugar } public virtual string GetDbColumnName(string entityName, string propertyName) { - if (this.MappingColumns.IsValuable()) + if (this.MappingColumns.HasValue()) { var mappingInfo = this.MappingColumns.SingleOrDefault(it => it.EntityName == entityName && it.PropertyName == propertyName); return mappingInfo == null ? propertyName : mappingInfo.DbColumnName; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index f74b5ab23..5dfcad7c4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -259,7 +259,7 @@ namespace SqlSugar newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle); this.Context.Index = newContext.Index; this.Context.ParameterIndex = newContext.ParameterIndex; - if (newContext.Parameters.IsValuable()) + if (newContext.Parameters.HasValue()) { this.Context.Parameters.AddRange(newContext.Parameters); } @@ -277,7 +277,7 @@ namespace SqlSugar newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle); this.Context.Index = newContext.Index; this.Context.ParameterIndex = newContext.ParameterIndex; - if (newContext.Parameters.IsValuable()) + if (newContext.Parameters.HasValue()) { this.Context.Parameters.AddRange(newContext.Parameters); } @@ -383,7 +383,7 @@ namespace SqlSugar newContext.Resolve(item, resolveExpressType); this.Context.Index = newContext.Index; this.Context.ParameterIndex = newContext.ParameterIndex; - if (newContext.Parameters.IsValuable()) + if (newContext.Parameters.HasValue()) { this.Context.Parameters.AddRange(newContext.Parameters); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index c06a56904..0a806404a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -15,7 +15,7 @@ namespace SqlSugar object value = ExpressionTool.GetValue(expression.Value); var baseParameter = parameter.BaseParameter; baseParameter.ChildExpression = expression; - var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); + var isSetTempData = baseParameter.CommonTempData.HasValue() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); switch (parameter.Context.ResolveType) { case ResolveExpressType.SelectSingle: diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs index 197fa23cc..8835c3f48 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs @@ -15,7 +15,7 @@ namespace SqlSugar var isLeft = parameter.IsLeft; object value = ExpressionTool.GetMemberValue(expression.Member, expression); var baseParameter = parameter.BaseParameter; - var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); + var isSetTempData = baseParameter.CommonTempData.HasValue() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); switch (parameter.Context.ResolveType) { case ResolveExpressType.Update: diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index d3bb16e88..96d3c0b95 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -21,13 +21,14 @@ namespace SqlSugar var isBool = expression.Type == UtilConstants.BoolType; var isValueBool = isValue && isBool && parameter.BaseExpression == null; var isLength = memberName == "Length" && childIsMember && childExpression.Type == UtilConstants.StringType; - var isDateValue = memberName.IsIn(Enum.GetNames(typeof(DateType))) &&(childIsMember&&childExpression.Type == UtilConstants.DateType); + var isDateValue = memberName.IsIn(Enum.GetNames(typeof(DateType))) && (childIsMember && childExpression.Type == UtilConstants.DateType); var isLogicOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue) || baseParameter.OperatorValue.IsNullOrEmpty(); var isHasValue = isLogicOperator && memberName == "HasValue" && expression.Expression != null && expression.NodeType == ExpressionType.MemberAccess; var isDateDate = memberName == "Date" && expression.Expression.Type == UtilConstants.DateType; var isMemberValue = expression.Expression != null && expression.Expression.NodeType != ExpressionType.Parameter && !isValueBool; var isSingle = parameter.Context.ResolveType == ResolveExpressType.WhereSingle; - + var fieldIsBool = isBool && isLogicOperator; + baseParameter.ChildExpression = expression; if (isLength) { ResolveLength(parameter, isLeft, expression); @@ -56,9 +57,12 @@ namespace SqlSugar { ResolveMemberValue(parameter, baseParameter, isLeft, isSetTempData, expression); } + else if (fieldIsBool) + { + ResolvefieldIsBool(parameter, baseParameter, isLeft, isSetTempData, expression, isSingle); + } else { - baseParameter.ChildExpression = expression; string fieldName = string.Empty; switch (parameter.Context.ResolveType) { @@ -122,14 +126,12 @@ namespace SqlSugar { var value = ExpressionTool.GetMemberValue(expression.Member, expression); base.AppendValue(parameter, isLeft, value); - return; } - fieldName = GetName(parameter, expression, isLeft, isSingle); - if (expression.Type == UtilConstants.BoolType && baseParameter.OperatorValue.IsNullOrEmpty()) + else { - fieldName = this.Context.DbMehtods.EqualTrue(fieldName); + fieldName = GetName(parameter, expression, isLeft, isSingle); + AppendMember(parameter, isLeft, fieldName); } - AppendMember(parameter, isLeft, fieldName); } } #endregion @@ -165,6 +167,19 @@ namespace SqlSugar AppendValue(parameter, isLeft, value); } } + private void ResolvefieldIsBool(ExpressionParameter parameter, ExpressionParameter baseParameter, bool? isLeft, bool isSetTempData, MemberExpression expression, bool isSingle) + { + var fieldName = GetName(parameter, expression, isLeft, isSingle); + if (isSetTempData) + { + baseParameter.CommonTempData = fieldName; + } + else + { + fieldName = this.Context.DbMehtods.EqualTrue(fieldName.ObjToString()); + AppendMember(parameter, isLeft, fieldName); + } + } private void ResolveDateDate(ExpressionParameter parameter, bool? isLeft, MemberExpression expression) { @@ -295,7 +310,7 @@ namespace SqlSugar string shortName = expression.Expression.ToString(); string fieldName = expression.Member.Name; fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName); - fieldName = Context.GetTranslationColumnName(shortName +UtilConstants.Dot+ fieldName); + fieldName = Context.GetTranslationColumnName(shortName + UtilConstants.Dot + fieldName); return fieldName; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 32abdfdd2..435ffb2e4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -47,7 +47,8 @@ namespace SqlSugar throw new NotSupportedException(); } MemberAssignment memberAssignment = (MemberAssignment)binding; - var memberName = memberAssignment.Member.Name; + var type = memberAssignment.Member.ReflectedType; + var memberName =this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name); var item = memberAssignment.Expression; if ((item is MemberExpression) && ((MemberExpression)item).Expression == null) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs index 208da23c9..2a926d6d0 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs @@ -16,7 +16,7 @@ namespace SqlSugar var isField = expression.Member is System.Reflection.FieldInfo; var isProperty = expression.Member is System.Reflection.PropertyInfo; var baseParameter = parameter.BaseParameter; - var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); + var isSetTempData = baseParameter.CommonTempData.HasValue() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); if (isField) { value = ExpressionTool.GetFiledValue(expression); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index b66c17f8c..e1f8be3f1 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -284,7 +284,7 @@ namespace SqlSugar base.Start(); var methodCallExpressionArgs = new MethodCallExpressionArgs() { - IsMember = parameter.ChildExpression is MemberExpression, + IsMember = parameter.ChildExpression is MemberExpression&&!ExpressionTool.IsConstExpression(parameter.ChildExpression as MemberExpression), MemberName = parameter.CommonTempData }; if (methodCallExpressionArgs.IsMember && parameter.ChildExpression != null && parameter.ChildExpression.ToString() == "DateTime.Now") diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs index 9606dc608..8ac2f9979 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs @@ -38,6 +38,12 @@ namespace SqlSugar public string GetValue(Expression expression = null) { var exp = expression as MethodCallExpression; + var entityType = (exp.Arguments[0] as LambdaExpression).Parameters[0].Type; + if (this.Context.InitMappingInfo != null) + { + this.Context.InitMappingInfo(entityType); + this.Context.RefreshMapping(); + } return SubTools.GetMethodValue(this.Context, exp.Arguments[0],ResolveExpressType.FieldSingle); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubTop.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubTop.cs index 2cf320ad2..6432c3329 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubTop.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubTop.cs @@ -10,12 +10,12 @@ namespace SqlSugar { public ExpressionContext Context { - get;set; + get; set; } public Expression Expression { - get;set; + get; set; } public string Name @@ -32,7 +32,7 @@ namespace SqlSugar { if (this.Context is SqlServerExpressionContext) { - return 150; + return 150; } else { @@ -48,7 +48,12 @@ namespace SqlSugar { return "TOP 1"; } - else { + else if (this.Context is OracleExpressionContext) + { + return "ROWNUM=1"; + } + else + { return "limit 0,1"; } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs index e2d9693ee..9697a03f0 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs @@ -39,7 +39,7 @@ namespace SqlSugar newContext.Resolve(item, type); context.Index = newContext.Index; context.ParameterIndex = newContext.ParameterIndex; - if (newContext.Parameters.IsValuable()) + if (newContext.Parameters.HasValue()) context.Parameters.AddRange(newContext.Parameters); return newContext.Result.GetResultString(); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs index 7ecc6bced..819c7b944 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs @@ -6,10 +6,7 @@ using System.Text; namespace SqlSugar { - /// - /// 开发中.... - /// - /// + public class Subqueryable where T : class, new() { public Subqueryable Where(Func expression) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs new file mode 100644 index 000000000..7a1eb51f3 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs @@ -0,0 +1,341 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Dynamic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +namespace SqlSugar +{ + public class ContextMethods : IContextMethods + { + public SqlSugarClient Context { get; set; } + #region DataReader + + /// + ///DataReader to Dynamic + /// + /// + /// + public ExpandoObject DataReaderToExpandoObject(IDataReader reader) + { + ExpandoObject result = new ExpandoObject(); + var dic = ((IDictionary)result); + for (int i = 0; i < reader.FieldCount; i++) + { + try + { + var addItem = reader.GetValue(i); + if (addItem == DBNull.Value) + addItem = null; + dic.Add(reader.GetName(i), addItem); + } + catch + { + dic.Add(reader.GetName(i), null); + } + } + return result; + } + + /// + ///DataReader to Dynamic List + /// + /// + /// + public List DataReaderToExpandoObjectList(IDataReader reader) + { + using (reader) + { + List result = new List(); + if (reader != null && !reader.IsClosed) + { + while (reader.Read()) + { + result.Add(DataReaderToExpandoObject(reader)); + } + } + return result; + } + } + + /// + ///DataReader to DataReaderToDictionary + /// + /// + /// + public Dictionary DataReaderToDictionary(IDataReader reader) + { + Dictionary result = new Dictionary(); + for (int i = 0; i < reader.FieldCount; i++) + { + try + { + var addItem = reader.GetValue(i); + if (addItem == DBNull.Value) + addItem = null; + result.Add(reader.GetName(i), addItem); + } + catch + { + result.Add(reader.GetName(i), null); + } + } + return result; + } + + /// + /// DataReaderToDynamicList + /// + /// + /// + /// + public List DataReaderToDynamicList(IDataReader reader) + { + using (reader) + { + var tType = typeof(T); + var classProperties = tType.GetProperties().ToList(); + var reval = new List(); + if (reader != null && !reader.IsClosed) + { + while (reader.Read()) + { + var readerValues = DataReaderToDictionary(reader); + var result = new Dictionary(); + foreach (var item in classProperties) + { + var name = item.Name; + var typeName = tType.Name; + if (item.PropertyType.IsClass()) + { + result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval)); + } + else + { + if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase))) + { + var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues[name.ToUpper()]; + if (addValue == DBNull.Value) + { + 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 (item.PropertyType == UtilConstants.IntType) + { + addValue = Convert.ToInt32(addValue); + } + } + result.Add(name, addValue); + } + } + } + var stringValue = SerializeObject(result); + reval.Add((T)DeserializeObject(stringValue)); + } + } + return reval; + } + } + + private Dictionary DataReaderToDynamicList_Part(Dictionary readerValues, PropertyInfo item, List reval) + { + Dictionary result = new Dictionary(); + var type = item.PropertyType; + var classProperties = type.GetProperties().ToList(); + foreach (var prop in classProperties) + { + var name = prop.Name; + var typeName = type.Name; + if (prop.PropertyType.IsClass()) + { + result.Add(name, DataReaderToDynamicList_Part(readerValues, prop, reval)); + } + else + { + var key = typeName + "." + name; + if (readerValues.ContainsKey(key)) + { + var addItem = readerValues[key]; + if (addItem == DBNull.Value) + addItem = null; + result.Add(name, addItem); + } + } + } + return result; + } + #endregion + + #region Serialize + /// + /// Serialize Object + /// + /// + /// + public string SerializeObject(object value) + { + DependencyManagement.TryJsonNet(); + return Context.CurrentConnectionConfig.ConfigureExternalServices.SerializeService.SerializeObject(value); + } + + + + /// + /// Serialize Object + /// + /// + /// + public T DeserializeObject(string value) + { + DependencyManagement.TryJsonNet(); + return Context.CurrentConnectionConfig.ConfigureExternalServices.SerializeService.DeserializeObject(value); + } + #endregion + + #region Copy Object + /// + /// Copy new Object + /// + /// + /// + /// + public T TranslateCopy(T sourceObject) + { + if (sourceObject == null) return default(T); + else + { + var jsonString = SerializeObject(sourceObject); + return DeserializeObject(jsonString); + } + } + public SqlSugarClient CopyContext(bool isCopyEvents = false) + { + var newClient = new SqlSugarClient(this.TranslateCopy(Context.CurrentConnectionConfig)); + newClient.MappingColumns = this.TranslateCopy(Context.MappingColumns); + newClient.MappingTables = this.TranslateCopy(Context.MappingTables); + newClient.IgnoreColumns = this.TranslateCopy(Context.IgnoreColumns); + if (isCopyEvents) + { + newClient.Ado.IsEnableLogEvent = Context.Ado.IsEnableLogEvent; + newClient.Ado.LogEventStarting = Context.Ado.LogEventStarting; + newClient.Ado.LogEventCompleted = Context.Ado.LogEventCompleted; + newClient.Ado.ProcessingEventStartingSQL = Context.Ado.ProcessingEventStartingSQL; + } + return newClient; + } + #endregion + + #region DataTable + public dynamic DataTableToDynamic(DataTable table) + { + List> deserializeObject = new List>(); + Dictionary childRow; + foreach (DataRow row in table.Rows) + { + childRow = new Dictionary(); + foreach (DataColumn col in table.Columns) + { + var addItem = row[col]; + if (addItem == DBNull.Value) + addItem = null; + childRow.Add(col.ColumnName, addItem); + } + deserializeObject.Add(childRow); + } + return this.DeserializeObject(this.SerializeObject(deserializeObject)); + + } + #endregion + + #region Cache + public ICacheService GetReflectionInoCacheInstance() + { + return Context.CurrentConnectionConfig.ConfigureExternalServices.ReflectionInoCacheService; + } + + public void RemoveCacheAll() + { + ReflectionInoHelper.RemoveAllCache(); + } + + public void RemoveCacheAll() + { + ReflectionInoCore.GetInstance().RemoveAllCache(); + } + + public void RemoveCache(string key) + { + ReflectionInoCore.GetInstance().Remove(key); + } + #endregion + + #region Query + public KeyValuePair ConditionalModelToSql(List models) + { + if (models.IsNullOrEmpty()) return new KeyValuePair(); + StringBuilder builder = new StringBuilder(); + List parameters = new List(); + var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); + foreach (var item in models) + { + var index = models.IndexOf(item); + var type = index == 0 ? "" : "AND"; + string temp = " {0} {1} {2} {3} "; + string parameterName = string.Format("{0}Conditional{1}{2}", sqlBuilder.SqlParameterKeyWord, item.FieldName, index); + switch (item.ConditionalType) + { + case ConditionalType.Equal: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "=", parameterName); + parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + break; + case ConditionalType.Like: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName); + parameters.Add(new SugarParameter(parameterName, "%" + item.FieldValue + "%")); + break; + case ConditionalType.GreaterThan: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">", parameterName); + parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + break; + case ConditionalType.GreaterThanOrEqual: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">=", parameterName); + parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + break; + case ConditionalType.LessThan: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<", parameterName); + parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + break; + case ConditionalType.LessThanOrEqual: + builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName); + parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + break; + default: + break; + } + } + return new KeyValuePair(builder.ToString(), parameters.ToArray()); + } + #endregion + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/DependencyManagement.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/DependencyManagement.cs index 43a53d6c8..b638424ff 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/DependencyManagement.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/DependencyManagement.cs @@ -11,13 +11,14 @@ namespace SqlSugar private static bool IsTryJsonNet = false; private static bool IsTryMySqlData = false; private static bool IsTrySqlite = false; + private static bool IsTryOracle = true; public static void TryJsonNet() { if (!IsTryJsonNet) { try { - JsonHelper.SerializeObject(new { }); + new SerializeService().SerializeObject(new { }); IsTryJsonNet = true; } catch @@ -39,16 +40,36 @@ namespace SqlSugar var conn = db.GetAdapter(); IsTryMySqlData = true; } - catch + catch { var message = ErrorMessage.GetThrowMessage( - "You need to refer to MySql.Data.dll" , + "You need to refer to MySql.Data.dll", "需要引用MySql.Data.dll,请在Nuget安装最新稳定版本,如果有版本兼容问题请先删除原有引用"); throw new Exception(message); } } } + internal static void TryOracle() + { + if (!IsTryOracle) + { + try + { + OracleProvider db = new OracleProvider(); + var conn = db.GetAdapter(); + IsTryOracle = true; + } + catch + { + var message = ErrorMessage.GetThrowMessage( + "You need to refer to Oracle.ManagedDataAccess.dll", + "需要引用ManagedDataAccess.dll,请在Nuget安装最新稳定版本,如果有版本兼容问题请先删除原有引用"); + throw new Exception(message); + } + } + } + public static void TrySqlite() { if (!IsTrySqlite) @@ -56,10 +77,10 @@ namespace SqlSugar try { SqliteProvider db = new SqliteProvider(); - var conn= db.GetAdapter(); + var conn = db.GetAdapter(); IsTrySqlite = true; } - catch(Exception ex) + catch (Exception ex) { var message = ErrorMessage.GetThrowMessage( "You need to refer to Microsoft.Data.Sqlite." + ex.Message, diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs index 5bf962ab6..13c58d8d9 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/InstanceFactory.cs @@ -91,28 +91,28 @@ namespace SqlSugar } #region 9-12 - public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) + public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) { string className = "Queryable"; className = GetClassName(currentConnectionConfig.DbType.ToString(), className); - ISugarQueryable result = CreateInstance>(className); + ISugarQueryable result = CreateInstance>(className); return result; } - public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) + public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) { string className = "Queryable"; className = GetClassName(currentConnectionConfig.DbType.ToString(), className); - ISugarQueryable result = CreateInstance>(className); + ISugarQueryable result = CreateInstance>(className); return result; } - public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) + public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) { string className = "Queryable"; className = GetClassName(currentConnectionConfig.DbType.ToString(), className); - ISugarQueryable result = CreateInstance>(className); + ISugarQueryable result = CreateInstance>(className); return result; } - public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) + public static ISugarQueryable GetQueryable(ConnectionConfig currentConnectionConfig) { string className = "Queryable"; className = GetClassName(currentConnectionConfig.DbType.ToString(), className); @@ -166,14 +166,64 @@ namespace SqlSugar public static ISqlBuilder GetSqlbuilder(ConnectionConfig currentConnectionConfig) { - ISqlBuilder result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "Builder")); - return result; + if (currentConnectionConfig.DbType == DbType.SqlServer) + { + return new SqlServerBuilder(); + } + else + { + ISqlBuilder result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "Builder")); + return result; + } + } + + public static UpdateableProvider GetUpdateableProvider(ConnectionConfig currentConnectionConfig) where T : class, new() + { + if (currentConnectionConfig.DbType == DbType.Oracle) + { + return new OracleUpdateable(); + } + else + { + return new UpdateableProvider(); + } + } + + public static DeleteableProvider GetDeleteableProvider(ConnectionConfig currentConnectionConfig) where T : class, new() + { + if (currentConnectionConfig.DbType == DbType.Oracle) + { + return new OracleDeleteable(); + } + else + { + return new DeleteableProvider(); + } + } + + public static InsertableProvider GetInsertableProvider(ConnectionConfig currentConnectionConfig) where T : class, new() + { + if (currentConnectionConfig.DbType == DbType.Oracle) + { + return new OracleInsertable(); + } + else + { + return new InsertableProvider(); + } } public static IDbBind GetDbBind(ConnectionConfig currentConnectionConfig) { - IDbBind result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "DbBind")); - return result; + if (currentConnectionConfig.DbType == DbType.SqlServer) + { + return new SqlServerDbBind(); + } + else + { + IDbBind result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "DbBind")); + return result; + } } public static IDbMaintenance GetDbMaintenance(ConnectionConfig currentConnectionConfig) @@ -196,8 +246,15 @@ namespace SqlSugar public static IAdo GetAdo(ConnectionConfig currentConnectionConfig) { - IAdo result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "Provider")); - return result; + if (currentConnectionConfig.DbType == DbType.SqlServer) + { + return new SqlServerProvider(); + } + else + { + IAdo result = CreateInstance(GetClassName(currentConnectionConfig.DbType.ToString(), "Provider")); + return result; + } } private static string GetClassName(string type, string name) @@ -240,21 +297,21 @@ namespace SqlSugar } #region 9-12 - private static Restult CreateInstance(string className) + private static Restult CreateInstance(string className) { - return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8),typeof(T9)); + return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9)); } - private static Restult CreateInstance(string className) + private static Restult CreateInstance(string className) { - return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9),typeof(T10)); + return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10)); } - private static Restult CreateInstance(string className) + private static Restult CreateInstance(string className) { - return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10),typeof(T11)); + return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11)); } - private static Restult CreateInstance(string className) + private static Restult CreateInstance(string className) { - return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11),typeof(T12)); + return CreateInstance(className, typeof(T), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12)); } #endregion diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/RewritableMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/RewritableMethods.cs deleted file mode 100644 index 9df038461..000000000 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/RewritableMethods.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data; -using System.Dynamic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -namespace SqlSugar -{ - public class RewritableMethods : IRewritableMethods - { - #region DataReader - - /// - ///DataReader to Dynamic - /// - /// - /// - public ExpandoObject DataReaderToExpandoObject(IDataReader reader) - { - ExpandoObject result = new ExpandoObject(); - var dic = ((IDictionary)result); - for (int i = 0; i < reader.FieldCount; i++) - { - try - { - var addItem = reader.GetValue(i); - if (addItem == DBNull.Value) - addItem = null; - dic.Add(reader.GetName(i), addItem); - } - catch - { - dic.Add(reader.GetName(i), null); - } - } - return result; - } - - /// - ///DataReader to Dynamic List - /// - /// - /// - public List DataReaderToExpandoObjectList(IDataReader reader) - { - List result = new List(); - if (reader != null && !reader.IsClosed) - { - while (reader.Read()) - { - result.Add(DataReaderToExpandoObject(reader)); - } - } - return result; - } - - /// - ///DataReader to DataReaderToDictionary - /// - /// - /// - public Dictionary DataReaderToDictionary(IDataReader reader) - { - Dictionary result = new Dictionary(); - for (int i = 0; i < reader.FieldCount; i++) - { - try - { - var addItem = reader.GetValue(i); - if (addItem == DBNull.Value) - addItem = null; - result.Add(reader.GetName(i), addItem); - } - catch - { - result.Add(reader.GetName(i), null); - } - } - return result; - } - - /// - /// DataReaderToDynamicList - /// - /// - /// - /// - public List DataReaderToDynamicList(IDataReader reader) - { - var tType = typeof(T); - var classProperties = tType.GetProperties().ToList(); - var reval = new List(); - if (reader != null && !reader.IsClosed) - { - while (reader.Read()) - { - var readerValues = DataReaderToDictionary(reader); - var result = new Dictionary(); - foreach (var item in classProperties) - { - var name = item.Name; - var typeName = tType.Name; - if (item.PropertyType.IsClass()) - { - result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval)); - } - else - { - if (readerValues.ContainsKey(name)) - { - var addValue = readerValues[name]; - if (addValue == DBNull.Value) - { - 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 (item.PropertyType == UtilConstants.IntType) - { - addValue = Convert.ToInt32(addValue); - } - } - result.Add(name, addValue); - } - } - } - var stringValue = SerializeObject(result); - reval.Add((T)DeserializeObject(stringValue)); - } - reader.Close(); - } - return reval; - } - - private Dictionary DataReaderToDynamicList_Part(Dictionary readerValues, PropertyInfo item, List reval) - { - Dictionary result = new Dictionary(); - var type = item.PropertyType; - var classProperties = type.GetProperties().ToList(); - foreach (var prop in classProperties) - { - var name = prop.Name; - var typeName = type.Name; - if (prop.PropertyType.IsClass()) - { - result.Add(name, DataReaderToDynamicList_Part(readerValues, prop, reval)); - } - else - { - var key = typeName + "." + name; - if (readerValues.ContainsKey(key)) - { - var addItem = readerValues[key]; - if (addItem == DBNull.Value) - addItem = null; - result.Add(name, addItem); - } - } - } - return result; - } - #endregion - - #region Serialize - /// - /// Serialize Object - /// - /// - /// - public string SerializeObject(object value) - { - DependencyManagement.TryJsonNet(); - return JsonHelper.SerializeObject(value); - } - - - - /// - /// Serialize Object - /// - /// - /// - public T DeserializeObject(string value) - { - DependencyManagement.TryJsonNet(); - return JsonHelper.DeserializeObject(value); - } - #endregion - - #region Copy Object - /// - /// Copy new Object - /// - /// - /// - /// - public T TranslateCopy(T sourceObject) - { - if (sourceObject == null) return default(T); - else - { - var jsonString = SerializeObject(sourceObject); - return DeserializeObject(jsonString); - } - } - public SqlSugarClient CopyContext(SqlSugarClient context,bool isCopyEvents=false) - { - var newClient = new SqlSugarClient(this.TranslateCopy(context.CurrentConnectionConfig)); - newClient.MappingColumns = this.TranslateCopy(context.MappingColumns); - newClient.MappingTables = this.TranslateCopy(context.MappingTables); - newClient.IgnoreColumns = this.TranslateCopy(context.IgnoreColumns); - if (isCopyEvents) { - newClient.Ado.IsEnableLogEvent = context.Ado.IsEnableLogEvent; - newClient.Ado.LogEventStarting = context.Ado.LogEventStarting; - newClient.Ado.LogEventCompleted = context.Ado.LogEventCompleted; - newClient.Ado.ProcessingEventStartingSQL = context.Ado.ProcessingEventStartingSQL; - } - return newClient; - } - #endregion - - #region DataTable - public dynamic DataTableToDynamic(DataTable table) - { - List> deserializeObject = new List>(); - Dictionary childRow; - foreach (DataRow row in table.Rows) - { - childRow = new Dictionary(); - foreach (DataColumn col in table.Columns) - { - var addItem = row[col]; - if (addItem == DBNull.Value) - addItem = null; - childRow.Add(col.ColumnName, addItem); - } - deserializeObject.Add(childRow); - } - return this.DeserializeObject(this.SerializeObject(deserializeObject)); - - } - #endregion - - #region Cache - public ICacheManager GetCacheInstance() - { - return CacheManager.GetInstance(); - } - - public void RemoveCacheAll() - { - CacheManager.RemoveAllCache(); - } - - public void RemoveCacheAll() - { - CacheManager.GetInstance().RemoveAllCache(); - } - - public void RemoveCache(string key) - { - CacheManager.GetInstance().Remove(key); - } - #endregion - - - } -} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/SqlSugarAccessory.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/SqlSugarAccessory.cs index 9e98903ef..65569dd1a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/SqlSugarAccessory.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/SqlSugarAccessory.cs @@ -25,7 +25,7 @@ namespace SqlSugar protected EntityMaintenance _EntityProvider; protected IAdo _Ado; protected ILambdaExpressions _LambdaExpressions; - protected IRewritableMethods _RewritableMethods; + protected IContextMethods _RewritableMethods; protected IDbMaintenance _DbMaintenance; protected QueryFilterProvider _QueryFilterProvider; protected SimpleClient _SimpleClient; @@ -98,13 +98,8 @@ namespace SqlSugar public void InitMppingInfo(Type type) { string cacheKey = "Context.InitAttributeMappingTables" + type.FullName; - var entityInfo = this.Context.Utilities.GetCacheInstance().Func(cacheKey, - (cm, key) => - { - var cacheInfo = cm[key]; - return cacheInfo; - }, - (cm, key) => + var entityInfo = this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, + () => { var reval = this.Context.EntityMaintenance.GetEntityInfo(type); return reval; @@ -121,7 +116,7 @@ namespace SqlSugar this.IgnoreColumns = new IgnoreColumnList(); if (!this.MappingTables.Any(it => it.EntityName == entityInfo.EntityName)) { - if (entityInfo.DbTableName != entityInfo.EntityName && entityInfo.DbTableName.IsValuable()) + if (entityInfo.DbTableName != entityInfo.EntityName && entityInfo.DbTableName.HasValue()) { this.MappingTables.Add(entityInfo.EntityName, entityInfo.DbTableName); } @@ -132,7 +127,7 @@ namespace SqlSugar foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false)) { if (!mappingColumnInfos.Any(it => it.PropertyName == item.PropertyName)) - if (item.PropertyName != item.DbColumnName && item.DbColumnName.IsValuable()) + if (item.PropertyName != item.DbColumnName && item.DbColumnName.HasValue()) this.MappingColumns.Add(item.PropertyName, item.DbColumnName, item.EntityName); } var ignoreInfos = this.IgnoreColumns.Where(it => it.EntityName == entityInfo.EntityName); @@ -166,7 +161,7 @@ namespace SqlSugar } protected InsertableProvider CreateInsertable(T[] insertObjs) where T : class, new() { - var reval = new InsertableProvider(); + var reval = InstanceFactory.GetInsertableProvider(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig); ; reval.Context = this.Context; reval.EntityInfo = this.Context.EntityMaintenance.GetEntityInfo(); @@ -181,7 +176,7 @@ namespace SqlSugar } protected DeleteableProvider CreateDeleteable() where T : class, new() { - var reval = new DeleteableProvider(); + var reval = InstanceFactory.GetDeleteableProvider(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig); ; reval.Context = this.Context; reval.SqlBuilder = sqlBuilder; @@ -193,7 +188,7 @@ namespace SqlSugar } protected UpdateableProvider CreateUpdateable(T[] UpdateObjs) where T : class, new() { - var reval = new UpdateableProvider(); + var reval = InstanceFactory.GetUpdateableProvider(this.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(this.CurrentConnectionConfig); ; reval.Context = this.Context; reval.EntityInfo = this.Context.EntityMaintenance.GetEntityInfo(); @@ -243,7 +238,7 @@ namespace SqlSugar { var isFirst = i == 0; ++i; JoinQueryInfo joinInfo = new JoinQueryInfo(); - var hasMappingTable = expressionContext.MappingTables.IsValuable(); + var hasMappingTable = expressionContext.MappingTables.HasValue(); MappingTable mappingInfo = null; if (hasMappingTable) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ICacheService.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ICacheService.cs new file mode 100644 index 000000000..a932fa60a --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ICacheService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace SqlSugar +{ + public interface ICacheService + { + void Add(string key, V value); + void Add(string key, V value, int cacheDurationInSeconds); + bool ContainsKey(string key); + V Get(string key); + IEnumerable GetAllKey(); + void Remove(string key); + V GetOrCreate(string cacheKey, Func create,int cacheDurationInSeconds=int.MaxValue); + } +} \ No newline at end of file diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ISerializeService.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ISerializeService.cs new file mode 100644 index 000000000..3441076b4 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationInterface/ISerializeService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public interface ISerializeService + { + string SerializeObject(object value); + T DeserializeObject(string value); + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/CacheManager.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/CacheService.cs similarity index 52% rename from Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/CacheManager.cs rename to Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/CacheService.cs index a75924416..740115728 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/CacheManager.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/CacheService.cs @@ -6,12 +6,48 @@ using System.Collections; using System.Linq.Expressions; namespace SqlSugar { - public class CacheManager : ICacheManager + public class ReflectionInoCacheService : ICacheService + { + public void Add(string key, V value) + { + ReflectionInoCore.GetInstance().Add(key,value); + } + public void Add(string key, V value, int cacheDurationInSeconds) + { + ReflectionInoCore.GetInstance().Add(key, value,cacheDurationInSeconds); + } + + public bool ContainsKey(string key) + { + return ReflectionInoCore.GetInstance().ContainsKey(key); + } + + public V Get(string key) + { + return ReflectionInoCore.GetInstance().Get(key); + } + + public IEnumerable GetAllKey() + { + return ReflectionInoCore.GetInstance().GetAllKey(); + } + + public V GetOrCreate(string cacheKey, Func create,int cacheDurationInSeconds=int.MaxValue) + { + return ReflectionInoCore.GetInstance().GetOrCreate(cacheKey, create); + } + + public void Remove(string key) + { + ReflectionInoCore.GetInstance().Remove(key); + } + } + public class ReflectionInoCore { readonly System.Collections.Concurrent.ConcurrentDictionary InstanceCache = new System.Collections.Concurrent.ConcurrentDictionary(); - private static CacheManager _instance = null; + private static ReflectionInoCore _instance = null; private static readonly object _instanceLock = new object(); - private CacheManager() { } + private ReflectionInoCore() { } public V this[string key] { @@ -34,15 +70,15 @@ namespace SqlSugar return default(V); } - public static CacheManager GetInstance() + public static ReflectionInoCore GetInstance() { if (_instance == null) lock (_instanceLock) if (_instance == null) { - _instance = new CacheManager(); - Action addItem =()=> { CacheManager.GetInstance().RemoveAllCache(); }; - CacheManager.Add(addItem); + _instance = new ReflectionInoCore(); + Action addItem =()=> { ReflectionInoCore.GetInstance().RemoveAllCache(); }; + ReflectionInoHelper.AddRemoveFunc(addItem); } return _instance; } @@ -54,7 +90,7 @@ namespace SqlSugar public void Add(string key, V value, int cacheDurationInSeconds) { - Add(key, value); + Check.ThrowNotSupportedException("ReflectionInoCache.Add(string key, V value, int cacheDurationInSeconds)"); } public void Remove(string key) @@ -76,30 +112,21 @@ namespace SqlSugar return this.InstanceCache.Keys; } - public void Action(string cacheKey, Action, string> successAction, Func, string, V> errorAction) + public V GetOrCreate(string cacheKey, Func create) { - if (this.ContainsKey(cacheKey)) successAction(this, cacheKey); + if (this.ContainsKey(cacheKey)) return Get(cacheKey); else { - this.Add(cacheKey, errorAction(this, cacheKey)); - } - } - public V Func(string cacheKey, Func, string, V> successAction, Func, string, V> errorAction) - { - var cm = CacheManager.GetInstance(); - if (cm.ContainsKey(cacheKey)) return successAction(cm, cacheKey); - else - { - var reval = errorAction(cm, cacheKey); - cm.Add(cacheKey, reval); + var reval = create(); + this.Add(cacheKey, reval); return reval; } } } - public static class CacheManager + internal static class ReflectionInoHelper { private static List removeActions = new List(); - internal static void Add(Action removeAction) + internal static void AddRemoveFunc(Action removeAction) { removeActions.Add(removeAction); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/JsonHelper.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/SerializeService.cs similarity index 72% rename from Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/JsonHelper.cs rename to Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/SerializeService.cs index 5a2b45b4c..cf6ec0a46 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/JsonHelper.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/IntegrationServices/SerializeService.cs @@ -6,14 +6,14 @@ using System.Text; namespace SqlSugar { - internal class JsonHelper + public class SerializeService:ISerializeService { - public static string SerializeObject(object value) + public string SerializeObject(object value) { return JsonConvert.SerializeObject(value); } - public static T DeserializeObject(string value) + public T DeserializeObject(string value) { var jSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; return JsonConvert.DeserializeObject(value, jSetting); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs index df018f822..cc34f9e74 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs @@ -63,7 +63,7 @@ namespace SqlSugar DateTime GetDateTime(string sql, object parameters); DateTime GetDateTime(string sql, params SugarParameter[] parameters); DateTime GetDateTime(string sql, List parameters); - List SqlQuery(string sql, object whereObj = null); + List SqlQuery(string sql, object parameters = null); List SqlQuery(string sql, params SugarParameter[] parameters); List SqlQuery(string sql, List parameters); T SqlQuerySingle(string sql, object whereObj = null); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IContextMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IContextMethods.cs new file mode 100644 index 000000000..a4dd8079d --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IContextMethods.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Dynamic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public interface IContextMethods + { + SqlSugarClient Context { get; set; } + ExpandoObject DataReaderToExpandoObject(IDataReader reader); + List DataReaderToExpandoObjectList(IDataReader reader); + List DataReaderToDynamicList(IDataReader reader); + string SerializeObject(object value); + T DeserializeObject(string value); + T TranslateCopy(T sourceObject); + SqlSugarClient CopyContext(bool isCopyEvents = false); + dynamic DataTableToDynamic(DataTable table); + ICacheService GetReflectionInoCacheInstance(); + void RemoveCacheAll(); + void RemoveCacheAll(); + void RemoveCache(string key); + KeyValuePair ConditionalModelToSql(List models); + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs index a564e051f..2fa7de4cf 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs @@ -11,7 +11,9 @@ namespace SqlSugar { DeleteBuilder DeleteBuilder { get; set; } int ExecuteCommand(); + bool ExecuteCommandHasChange(); Task ExecuteCommandAsync(); + Task ExecuteCommandHasChangeAsync(); IDeleteable AS(string tableName); IDeleteable With(string lockString); IDeleteable Where(T deleteObj); @@ -24,6 +26,7 @@ namespace SqlSugar IDeleteable Where(string whereString, SugarParameter parameter); IDeleteable Where(string whereString, SugarParameter[] parameters); IDeleteable Where(string whereString, List parameters); + IDeleteable RemoveDataCache(); KeyValuePair> ToSql(); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs index 5c47059a2..e30ff8e00 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs @@ -26,6 +26,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(string whereString, object whereObj = null); + ISugarQueryable Where(List conditionalModels); ISugarQueryable Having(Expression> expression); ISugarQueryable Having(string whereString, object whereObj = null); @@ -44,6 +45,9 @@ namespace SqlSugar ISugarQueryable OrderBy(string orderFileds); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy,string orderFileds); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable GroupBy(Expression> expression); ISugarQueryable GroupBy(string groupFileds); @@ -118,6 +122,9 @@ namespace SqlSugar Task> ToPageListAsync(int pageIndex, int pageSize); List ToPageList(int pageIndex, int pageSize, ref int totalNumber); Task,int>> ToPageListAsync(int pageIndex, int pageSize, int totalNumber); + ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); + string ToClassString(string className); void Clear(); } public partial interface ISugarQueryable : ISugarQueryable @@ -125,6 +132,7 @@ namespace SqlSugar #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere,Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -138,8 +146,12 @@ namespace SqlSugar #endregion #region OrderBy + new ISugarQueryable OrderBy(string orderFileds); new ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds); + new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); #endregion #region GroupBy @@ -169,6 +181,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -177,6 +191,7 @@ namespace SqlSugar new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -195,6 +210,10 @@ namespace SqlSugar new ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds); + new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); #endregion #region GroupBy @@ -225,6 +244,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache,int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -234,6 +255,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -255,6 +277,11 @@ namespace SqlSugar ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds); + new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); #endregion #region GroupBy @@ -286,6 +313,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache,int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -296,6 +325,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -321,6 +351,12 @@ namespace SqlSugar ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc); + new ISugarQueryable OrderByIF(bool isOrderBy, string orderFileds); + new ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); + ISugarQueryable OrderByIF(bool isOrderBy, Expression> expression, OrderByType type = OrderByType.Asc); #endregion #region GroupBy @@ -353,6 +389,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache,int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -364,6 +402,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -424,6 +463,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -436,6 +477,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -500,6 +542,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -513,6 +557,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -581,6 +626,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } @@ -597,6 +644,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -669,6 +717,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -684,6 +734,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -760,6 +811,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache,int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -776,6 +829,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -856,6 +910,8 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); #endregion } public partial interface ISugarQueryable : ISugarQueryable @@ -873,6 +929,7 @@ namespace SqlSugar ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); + new ISugarQueryable Where(List conditionalModels); new ISugarQueryable WhereIF(bool isWhere, Expression> expression); ISugarQueryable WhereIF(bool isWhere, Expression> expression); @@ -957,7 +1014,9 @@ namespace SqlSugar new ISugarQueryable AddParameters(List parameters); new ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left); new ISugarQueryable With(string withString); - #endregion ,T12 + new ISugarQueryable WithCache(int cacheDurationInSeconds = int.MaxValue); + new ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); + #endregion } #endregion } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs index 1de0a953d..31dca2110 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs @@ -11,7 +11,9 @@ namespace SqlSugar { UpdateBuilder UpdateBuilder { get; set; } int ExecuteCommand(); + bool ExecuteCommandHasChange(); Task ExecuteCommandAsync(); + Task ExecuteCommandHasChangeAsync(); IUpdateable AS(string tableName); IUpdateable With(string lockString); IUpdateable Where(bool isNoUpdateNull,bool IsOffIdentity = false); @@ -28,6 +30,7 @@ namespace SqlSugar IUpdateable IgnoreColumns(Expression> columns); IUpdateable IgnoreColumns(Func ignoreColumMethod); IUpdateable ReSetValue(Expression> setValueExpression); + IUpdateable RemoveDataCache(); KeyValuePair> ToSql(); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs index 862739ccd..8e9e67149 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/Insertable.cs @@ -27,6 +27,7 @@ namespace SqlSugar IInsertable IgnoreColumns(Expression> columns); IInsertable IgnoreColumns(Func ignoreColumMethod); IInsertable Where(bool isInsertNull, bool isOffIdentity = false); + IInsertable RemoveDataCache(); KeyValuePair> ToSql(); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/DataExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/DataExtensions.cs index addc4ab6c..3167fd199 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/DataExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/DataExtensions.cs @@ -3,6 +3,7 @@ using MySql.Data.MySqlClient; using System; using System.Collections; using System.Collections.Generic; +using System.Data.OracleClient; using System.Data.SqlClient; using System.Linq; using System.Threading.Tasks; @@ -779,4 +780,132 @@ namespace SqlSugar } } } + + /// + /// 数据填充器 + /// + public class OracleDataAdapter : IDataAdapter + { + private OracleCommand command; + private string sql; + private OracleConnection _sqlConnection; + + /// + /// SqlDataAdapter + /// + /// + public OracleDataAdapter(OracleCommand command) + { + this.command = command; + } + + public OracleDataAdapter() + { + + } + + /// + /// SqlDataAdapter + /// + /// + /// + public OracleDataAdapter(string sql, OracleConnection _sqlConnection) + { + this.sql = sql; + this._sqlConnection = _sqlConnection; + } + + /// + /// SelectCommand + /// + public OracleCommand SelectCommand + { + get + { + if (this.command == null) + { + this.command = new OracleCommand(this.sql, this._sqlConnection); + } + return this.command; + } + set + { + this.command = value; + } + } + + /// + /// Fill + /// + /// + public void Fill(DataTable dt) + { + if (dt == null) + { + dt = new DataTable(); + } + var columns = dt.Columns; + var rows = dt.Rows; + using (OracleDataReader dr = command.ExecuteReader()) + { + for (int i = 0; i < dr.FieldCount; i++) + { + string name = dr.GetName(i).Trim(); + if (!columns.ContainsKey(name)) + columns.Add(new DataColumn(name, dr.GetFieldType(i))); + } + + while (dr.Read()) + { + DataRow daRow = new DataRow(); + for (int i = 0; i < columns.Count; i++) + { + if (!daRow.ContainsKey(columns[i].ColumnName)) + daRow.Add(columns[i].ColumnName, dr.GetValue(i)); + } + dt.Rows.Add(daRow); + } + } + + } + + /// + /// Fill + /// + /// + public void Fill(DataSet ds) + { + if (ds == null) + { + ds = new DataSet(); + } + using (OracleDataReader dr = command.ExecuteReader()) + { + do + { + var dt = new DataTable(); + var columns = dt.Columns; + var rows = dt.Rows; + for (int i = 0; i < dr.FieldCount; i++) + { + string name = dr.GetName(i).Trim(); + if (!columns.ContainsKey(name)) + columns.Add(new DataColumn(name, dr.GetFieldType(i))); + } + + while (dr.Read()) + { + DataRow daRow = new DataRow(); + for (int i = 0; i < columns.Count; i++) + { + if (!daRow.ContainsKey(columns[i].ColumnName)) + daRow.Add(columns[i].ColumnName, dr.GetValue(i)); + } + dt.Rows.Add(daRow); + } + ds.Tables.Add(dt); + } while (dr.NextResult()); + } + } + } } \ No newline at end of file diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs index 5e55c214a..c48cd3a59 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs @@ -11,7 +11,7 @@ namespace SqlSugar { public override void ExecuteBefore(string sql, SugarParameter[] parameters) { - if (sql.IsValuable() && parameters.IsValuable()) + if (sql.HasValue() && parameters.HasValue()) { foreach (var parameter in parameters) { @@ -30,7 +30,7 @@ namespace SqlSugar { if (parameters == null || parameters.Length == 0) { - action(sql, null); + action(sql, new SugarParameter[] { }); } else { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs index 9a1cb3fd5..f892efb2a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs @@ -12,7 +12,7 @@ namespace SqlSugar var tableName = GetTableName(entityInfo); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); - if (entityInfo.Columns.IsValuable()) + if (entityInfo.Columns.HasValue()) { foreach (var item in entityInfo.Columns) { @@ -28,7 +28,7 @@ namespace SqlSugar { DataType = this.Context.Ado.DbBind.GetDbTypeName(UtilMethods.GetUnderType(item.PropertyInfo).Name), TableId = entityInfo.Columns.IndexOf(item), - DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, + DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName, IsPrimarykey = item.IsPrimarykey, IsIdentity = item.IsIdentity, TableName = tableName, diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs index d6cfecfe5..ee18a07cb 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs @@ -21,7 +21,7 @@ namespace SqlSugar if (csharpTypeName == "Boolean") csharpTypeName = "bool"; var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); - return mappings.IsValuable() ? mappings.First().Key : "varchar"; + return mappings.HasValue() ? mappings.First().Key : "varchar"; } public override List> MappingTypes { @@ -49,6 +49,7 @@ namespace SqlSugar new KeyValuePair("real",CSharpDataType.@double), new KeyValuePair("double",CSharpDataType.@double), new KeyValuePair("float",CSharpDataType.@float), + new KeyValuePair("float",CSharpDataType.Single), new KeyValuePair("decimal",CSharpDataType.@decimal), new KeyValuePair("numeric",CSharpDataType.@decimal), new KeyValuePair("year",CSharpDataType.@int), diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs index 8fb35776e..b2874a4a3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs @@ -181,13 +181,13 @@ namespace SqlSugar #region Methods public override bool CreateTable(string tableName, List columns) { - if (columns.IsValuable()) + if (columns.HasValue()) { foreach (var item in columns) { - if (item.DbColumnName.Equals("GUID",StringComparison.CurrentCultureIgnoreCase)&& item.Length==0) + if (item.DbColumnName.Equals("GUID",StringComparison.CurrentCultureIgnoreCase)&&item.Length==0) { - item.Length = 36; + item.Length = 10; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/MySqlProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/MySqlProvider.cs index 8e7507076..84fad66c9 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/MySqlProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/MySqlProvider.cs @@ -79,7 +79,7 @@ namespace SqlSugar { sqlCommand.Transaction = (MySqlTransaction)this.Transaction; } - if (parameters.IsValuable()) + if (parameters.HasValue()) { IDataParameter[] ipars = ToIDbDataParameter(parameters); sqlCommand.Parameters.AddRange((MySqlParameter[])ipars); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs index 85fb31477..c8efe1671 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs @@ -63,7 +63,7 @@ namespace SqlSugar pageIndex++; updateTable.Append("\r\n"); string whereString = null; - if (this.WhereValues.IsValuable()) + if (this.WhereValues.HasValue()) { foreach (var item in WhereValues) { @@ -72,7 +72,7 @@ namespace SqlSugar whereString += item; } } - else if (PrimaryKeys.IsValuable()) + else if (PrimaryKeys.HasValue()) { foreach (var item in PrimaryKeys) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/CodeFirst/OracleCodeFirst.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/CodeFirst/OracleCodeFirst.cs new file mode 100644 index 000000000..17b650cda --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/CodeFirst/OracleCodeFirst.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleCodeFirst : CodeFirstProvider + { + public OracleCodeFirst() + { + throw new Exception("Oracle该功能还未测试"); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbBind/OracleDbBind.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbBind/OracleDbBind.cs new file mode 100644 index 000000000..d6d827913 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbBind/OracleDbBind.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +namespace SqlSugar +{ + public class OracleDbBind : DbBindProvider + { + public override string GetPropertyTypeName(string dbTypeName) + { + dbTypeName = dbTypeName.ToLower(); + var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName||it.Key.ToLower()== dbTypeName); + if (dbTypeName == "int32") + { + return "int"; + } + else if (dbTypeName == "int64") + { + return "long"; + } + else if (dbTypeName == "int16") + { + return "short"; + } + else if (propertyTypes == null) + { + return "other"; + } + else if (dbTypeName == "xml" || dbTypeName == "string") + { + return "string"; + } + else if (propertyTypes == null || propertyTypes.Count() == 0) + { + Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName)); + return null; + } + else if (propertyTypes.First().Value == CSharpDataType.byteArray) + { + return "byte[]"; + } + else + { + return propertyTypes.First().Value.ToString(); + } + } + public override List> MappingTypes + { + get + { + return new List>() + { + new KeyValuePair("int",CSharpDataType.@int), + new KeyValuePair("integer",CSharpDataType.@int), + new KeyValuePair("interval year to month",CSharpDataType.@int), + new KeyValuePair("interval day to second",CSharpDataType.@int), + + new KeyValuePair("number",CSharpDataType.@int), + new KeyValuePair("number",CSharpDataType.@float), + new KeyValuePair("number",CSharpDataType.@short), + new KeyValuePair("number",CSharpDataType.@byte), + new KeyValuePair("number",CSharpDataType.@double), + new KeyValuePair("number",CSharpDataType.@long), + new KeyValuePair("number",CSharpDataType.@bool), + new KeyValuePair("number",CSharpDataType.@decimal), + new KeyValuePair("number",CSharpDataType.Single), + new KeyValuePair("decimal",CSharpDataType.@decimal), + new KeyValuePair("decimal",CSharpDataType.Single), + + new KeyValuePair("varchar",CSharpDataType.@string), + new KeyValuePair("varchar2",CSharpDataType.@string), + new KeyValuePair("nvarchar2",CSharpDataType.@string), + new KeyValuePair("char",CSharpDataType.@string), + new KeyValuePair("nchar",CSharpDataType.@string), + new KeyValuePair("clob",CSharpDataType.@string), + new KeyValuePair("long",CSharpDataType.@string), + new KeyValuePair("nclob",CSharpDataType.@string), + new KeyValuePair("rowid",CSharpDataType.@string), + + new KeyValuePair("date",CSharpDataType.DateTime), + new KeyValuePair("timestamp",CSharpDataType.DateTime), + new KeyValuePair("timestamp with local time zone",CSharpDataType.DateTime), + new KeyValuePair("timestamp with time zone",CSharpDataType.DateTime), + new KeyValuePair("timestamp with time zone",CSharpDataType.DateTime), + + new KeyValuePair("float",CSharpDataType.@decimal), + + new KeyValuePair("blob",CSharpDataType.byteArray), + new KeyValuePair("long raw",CSharpDataType.byteArray), + new KeyValuePair("raw",CSharpDataType.byteArray), + new KeyValuePair("bfile",CSharpDataType.byteArray), + new KeyValuePair("varbinary",CSharpDataType.byteArray) }; + + } + } + public override List StringThrow + { + get + { + return new List() { "int32", "datetime", "decimal", "double", "byte" }; + } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbFirst/OracleDbFirst.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbFirst/OracleDbFirst.cs new file mode 100644 index 000000000..fba461c66 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbFirst/OracleDbFirst.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleDbFirst : DbFirstProvider + { + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs new file mode 100644 index 000000000..00d0ae1ba --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleDbMaintenance : DbMaintenanceProvider + { + #region DML + protected override string GetColumnInfosByTableNameSql + { + get + { + throw new NotSupportedException(); + } + } + protected override string GetTableInfoListSql + { + get + { + return @"SELECT table_name name from user_tables where + table_name!='HELP' + AND table_name NOT LIKE '%$%' + AND table_name NOT LIKE 'LOGMNRC_%' + AND table_name!='LOGMNRP_CTAS_PART_MAP' + AND table_name!='LOGMNR_LOGMNR_BUILDLOG' + AND table_name!='SQLPLUS_PRODUCT_PROFILE' + "; + } + } + protected override string GetViewInfoListSql + { + get + { + return @"select view_name name from user_views + WHERE VIEW_name NOT LIKE '%$%' + AND VIEW_NAME !='PRODUCT_PRIVS' + AND VIEW_NAME NOT LIKE 'MVIEW_%' "; + } + } + #endregion + + #region DDL + protected override string AddPrimaryKeySql + { + get + { + return "ALTER TABLE {0} ADD CONSTRAINT {1} PRIMARY KEY({2})"; + } + } + protected override string AddColumnToTableSql + { + get + { + return "ALTER TABLE {0} ADD {1} {2}{3} {4} {5} {6}"; + } + } + protected override string AlterColumnToTableSql + { + get + { + return "ALTER TABLE {0} ALTER COLUMN {1} {2}{3} {4} {5} {6}"; + } + } + protected override string BackupDataBaseSql + { + get + { + return @"USE master;BACKUP DATABASE {0} TO disk = '{1}'"; + } + } + protected override string CreateTableSql + { + get + { + return "CREATE TABLE {0}(\r\n{1})"; + } + } + protected override string CreateTableColumn + { + get + { + return "{0} {1}{2} {3} {4} {5}"; + } + } + protected override string TruncateTableSql + { + get + { + return "TRUNCATE TABLE {0}"; + } + } + protected override string BackupTableSql + { + get + { + return "SELECT TOP {0} * INTO {1} FROM {2}"; + } + } + protected override string DropTableSql + { + get + { + return "DROP TABLE {0}"; + } + } + protected override string DropColumnToTableSql + { + get + { + return "ALTER TABLE {0} DROP COLUMN {1}"; + } + } + protected override string DropConstraintSql + { + get + { + return "ALTER TABLE {0} DROP CONSTRAINT {1}"; + } + } + protected override string RenameColumnSql + { + get + { + return "exec sp_rename '{0}.{1}','{2}','column';"; + } + } + #endregion + + #region Check + protected override string CheckSystemTablePermissionsSql + { + get + { + return "select t.table_name from user_tables t where rownum=1"; + } + } + #endregion + + #region Scattered + protected override string CreateTableNull + { + get + { + return "NULL"; + } + } + protected override string CreateTableNotNull + { + get + { + return "NOT NULL"; + } + } + protected override string CreateTablePirmaryKey + { + get + { + return "PRIMARY KEY"; + } + } + protected override string CreateTableIdentity + { + get + { + return "IDENTITY(1,1)"; + } + } + #endregion + + #region Methods + public override List GetColumnInfosByTableName(string tableName) + { + string cacheKey = "DbMaintenanceProvider.GetColumnInfosByTableName." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); + cacheKey = GetCacheKey(cacheKey); + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, + () => + { + string sql = "select * from " + tableName + " WHERE 1=2 "; + var oldIsEnableLog = this.Context.Ado.IsEnableLogEvent; + this.Context.Ado.IsEnableLogEvent = false; + using (DbDataReader reader = (DbDataReader)this.Context.Ado.GetDataReader(sql)) + { + this.Context.Ado.IsEnableLogEvent = oldIsEnableLog; + List result = new List(); + var schemaTable = reader.GetSchemaTable(); + foreach (DataRow row in schemaTable.Rows) + { + DbColumnInfo column = new DbColumnInfo() + { + TableName = tableName, + DataType = row["DataType"].ToString().Replace("System.", "").Trim(), + IsNullable = (bool)row["AllowDBNull"], + //IsIdentity = (bool)row["IsAutoIncrement"], + ColumnDescription = null, + DbColumnName = row["ColumnName"].ToString(), + //DefaultValue = row["defaultValue"].ToString(), + IsPrimarykey = GetPrimaryKeyByTableNames(tableName).Any(it=>it.Equals(row["ColumnName"].ToString(), StringComparison.CurrentCultureIgnoreCase)), + Length = row["ColumnSize"].ObjToInt(), + Scale = row["numericscale"].ObjToInt() + }; + result.Add(column); + } + return result; + } + + }); + } + private List GetPrimaryKeyByTableNames(string tableName) + { + string cacheKey = "DbMaintenanceProvider.GetPrimaryKeyByTableNames." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); + cacheKey = GetCacheKey(cacheKey); + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, + () => + { + var oldIsEnableLog = this.Context.Ado.IsEnableLogEvent; + this.Context.Ado.IsEnableLogEvent = false; + string sql = @" select distinct cu.COLUMN_name KEYNAME from user_cons_columns cu, user_constraints au + where cu.constraint_name = au.constraint_name + and au.constraint_type = 'P' and au.table_name = '" +tableName.ToUpper()+ @"'"; + var pks = this.Context.Ado.SqlQuery(sql); + this.Context.Ado.IsEnableLogEvent = oldIsEnableLog; + return pks; + }); + } + #endregion + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Deleteable/OracleDeleteable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Deleteable/OracleDeleteable.cs new file mode 100644 index 000000000..fbd8d54a0 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Deleteable/OracleDeleteable.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleDeleteable:DeleteableProvider where T:class,new() + { + protected override List GetIdentityKeys() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs new file mode 100644 index 000000000..ee8f37a10 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Insertable/OracleInsertable.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleInsertable : InsertableProvider where T : class, new() + { + + protected override List GetIdentityKeys() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); + } + protected string GetSeqName() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.OracleSequenceName).First(); + } + protected List GetSeqNames() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.OracleSequenceName).ToList(); + } + public override int ExecuteReturnIdentity() + { + InsertBuilder.IsReturnIdentity = true; + PreToSql(); + string sql = InsertBuilder.ToSqlString(); + RestoreMapping(); + var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); + var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName()); + return result; + } + + public override int ExecuteCommand() + { + base.ExecuteCommand(); + return base.InsertObjs.Count(); + } + + private int GetSeqValue(string seqName) + { + return Ado.GetInt(" SELECT " + seqName + ".currval FROM DUAL"); + } + + protected override void PreToSql() + { + var identities = GetSeqNames(); + var insertCount = InsertObjs.Count(); + InsertBuilder.OracleSeqInfoList = new Dictionary(); + if (identities.HasValue() && insertCount > 1) + { + Check.Exception(identities.Count != identities.Distinct().Count(), "The field sequence needs to be unique"); + foreach (var seqName in identities) + { + int seqBeginValue = 0; + this.Ado.ExecuteCommand("alter sequence " + seqName + " increment by " + insertCount); + seqBeginValue = this.Ado.GetInt("select " + seqName + ".Nextval from dual") - insertCount; + this.Ado.ExecuteCommand("alter sequence " + seqName + " increment by " + 1); + InsertBuilder.OracleSeqInfoList.Add(seqName, seqBeginValue); + } + } + base.PreToSql(); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/OracleProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/OracleProvider.cs new file mode 100644 index 000000000..e0086b05a --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/OracleProvider.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.OracleClient; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +namespace SqlSugar +{ + public class OracleProvider : AdoProvider + { + public OracleProvider() { } + public override string SqlParameterKeyWord + { + get + { + return ":"; + } + } + public override IDbConnection Connection + { + get + { + try + { + if (base._DbConnection == null) + { + base._DbConnection = new OracleConnection(base.Context.CurrentConnectionConfig.ConnectionString); + } + } + catch (Exception ex) + { + + Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message); + } + return base._DbConnection; + } + set + { + base._DbConnection = value; + } + } + /// + /// Only SqlServer + /// + /// + public override void BeginTran(string transactionName) + { + ((OracleConnection)this.Connection).BeginTransaction(); + } + /// + /// Only SqlServer + /// + /// + /// + public override void BeginTran(IsolationLevel iso, string transactionName) + { + ((OracleConnection)this.Connection).BeginTransaction(iso); + } + public override IDataAdapter GetAdapter() + { + return new OracleDataAdapter(); + } + public override IDbCommand GetCommand(string sql, SugarParameter[] parameters) + { + OracleCommand sqlCommand = new OracleCommand(sql, (OracleConnection)this.Connection); + sqlCommand.CommandType = this.CommandType; + sqlCommand.CommandTimeout = this.CommandTimeOut; + if (this.Transaction != null) + { + sqlCommand.Transaction = (OracleTransaction)this.Transaction; + } + if (parameters.HasValue()) + { + IDataParameter[] ipars = ToIDbDataParameter(parameters); + sqlCommand.Parameters.AddRange((OracleParameter[])ipars); + } + CheckConnection(); + return sqlCommand; + } + public override void SetCommandToAdapter(IDataAdapter dataAdapter, IDbCommand command) + { + ((OracleDataAdapter)dataAdapter).SelectCommand = (OracleCommand)command; + } + /// + /// if mysql return MySqlParameter[] pars + /// if sqlerver return SqlParameter[] pars ... + /// + /// + /// + public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters) + { + if (parameters == null || parameters.Length == 0) return null; + OracleParameter[] result = new OracleParameter[parameters.Length]; + int index = 0; + foreach (var parameter in parameters) + { + if (parameter.Value == null) parameter.Value = DBNull.Value; + var sqlParameter = new OracleParameter(); + sqlParameter.Size = parameter.Size == -1 ? 0 : parameter.Size; + sqlParameter.ParameterName = parameter.ParameterName.ToLower(); + if (sqlParameter.ParameterName[0] == '@') + { + sqlParameter.ParameterName = ':' + sqlParameter.ParameterName.Substring(1, sqlParameter.ParameterName.Length - 1); + } + if (this.CommandType == CommandType.StoredProcedure) + { + sqlParameter.ParameterName = sqlParameter.ParameterName.TrimStart(':'); + } + if (sqlParameter.DbType == System.Data.DbType.Guid) + { + sqlParameter.DbType = System.Data.DbType.String; + sqlParameter.Value = sqlParameter.Value.ObjToString(); + } + else if (parameter.DbType == System.Data.DbType.Boolean) + { + sqlParameter.DbType = System.Data.DbType.Int16; + sqlParameter.Value = (bool)parameter.Value ? 1 : 0; + } + else + { + sqlParameter.Value = parameter.Value; + } + if (parameter.Direction != 0) + sqlParameter.Direction = parameter.Direction; + result[index] = sqlParameter; + if (sqlParameter.Direction == ParameterDirection.Output) + { + if (this.OutputParameters == null) this.OutputParameters = new List(); + this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName); + this.OutputParameters.Add(sqlParameter); + } + + ++index; + } + return result; + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Queryable/OracleQueryable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Queryable/OracleQueryable.cs new file mode 100644 index 000000000..720bdc8ec --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Queryable/OracleQueryable.cs @@ -0,0 +1,65 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; + +namespace SqlSugar +{ + public class OracleQueryable : QueryableProvider + { + public override ISugarQueryable With(string withString) + { + return this; + } + protected override List GetIdentityKeys() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); + } + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } + public class OracleQueryable : QueryableProvider + { + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleBuilder.cs new file mode 100644 index 000000000..d2d062335 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleBuilder.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class OracleBuilder : SqlBuilderProvider + { + public override string SqlParameterKeyWord + { + get + { + return ":"; + } + } + public override string SqlDateNow + { + get + { + return "sysdate"; + } + } + public override string SqlTranslationLeft { get { return "\""; } } + public override string SqlTranslationRight { get { return "\""; } } + public override string GetTranslationTableName(string name) + { + var result= base.GetTranslationTableName(name); + return result.ToUpper(); + } + public override string GetTranslationColumnName(string entityName, string propertyName) + { + var result = base.GetTranslationColumnName(entityName, propertyName); + return result.ToUpper(); + } + public override string GetTranslationColumnName(string propertyName) + { + var result = base.GetTranslationColumnName(propertyName); + return result.ToUpper(); + } + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleDeleteBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleDeleteBuilder.cs new file mode 100644 index 000000000..504d0befa --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleDeleteBuilder.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class OracleDeleteBuilder : DeleteBuilder + { + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs new file mode 100644 index 000000000..4ed6716a4 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public partial class OracleExpressionContext : ExpressionContext, ILambdaExpressions + { + public SqlSugarClient Context { get; set; } + public OracleExpressionContext() + { + base.DbMehtods = new OracleMethod(); + } + public override string SqlParameterKeyWord + { + get + { + return ":"; + } + } + public override string SqlTranslationLeft { get { return "\""; } } + public override string SqlTranslationRight { get { return "\""; } } + public override string GetTranslationTableName(string entityName, bool isMapping = true) + { + return base.GetTranslationTableName(entityName, isMapping).ToUpper(); + } + public override string GetTranslationColumnName(string columnName) + { + return base.GetTranslationColumnName(columnName).ToUpper(); + } + public override string GetDbColumnName(string entityName, string propertyName) + { + return base.GetDbColumnName(entityName,propertyName).ToUpper(); + } + } + public partial class OracleMethod : DefaultDbMethod, IDbMethods + { + public override string ToTime(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" to_timestamp({0},'0000-01-01 hh24:mi:ss') ", parameter.MemberName); + } + public override string DateValue(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + var type = (DateType)Enum.Parse(typeof(DateType), parameter2.MemberValue.ObjToString(), false); + switch (type) + { + case DateType.Year: + return string.Format("(CAST(TO_CHAR({0},'yyyy') AS NUMBER)",parameter.MemberName); + case DateType.Month: + return string.Format("(CAST(TO_CHAR({0},'mm') AS NUMBER)", parameter.MemberName); + case DateType.Hour: + return string.Format("(CAST(TO_CHAR({0},'hh24') AS NUMBER)", parameter.MemberName); + case DateType.Second: + return string.Format("(CAST(TO_CHAR({0},'ss') AS NUMBER)", parameter.MemberName); + case DateType.Minute: + return string.Format("(CAST(TO_CHAR({0},'mi') AS NUMBER)", parameter.MemberName); + case DateType.Millisecond: + return string.Format("(CAST(TO_CHAR({0},'ff3') AS NUMBER)", parameter.MemberName); + case DateType.Day: + default: + return string.Format("(CAST(TO_CHAR({0},'dd') AS NUMBER)", parameter.MemberName); + } + } + public override string DateAddByType(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + var parameter3 = model.Args[2]; + var type = (DateType)Enum.Parse(typeof(DateType), parameter3.MemberValue.ObjToString(), false); + double time = 1; + switch (type) + { + case DateType.Year: + time = 1 * 365; + break; + case DateType.Month: + time = 1 *30; + break; + case DateType.Day: + break; + case DateType.Hour: + time = 1 / 24.0; + break; + case DateType.Second: + time = 1 / 24.0/60.0/60.0; + break; + case DateType.Minute: + time = 1 / 24.0/60.0; + break; + case DateType.Millisecond: + time = 1 / 24.0 / 60.0 / 60.0/1000; + break; + } + return string.Format("({0}+({1}*{2})) ", parameter.MemberName, time,parameter2.MemberName); + } + + public override string DateAddDay(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format("({0}+(1*{1})) ", parameter.MemberName, parameter2.MemberName); + } + + public override string ToString(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS VARCHAR2(4000))", parameter.MemberName); + } + + public override string ToDate(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" to_date({0},'yyyy-mm-dd hh24:mi:ss')", parameter.MemberName); + } + public override string Contains(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like '%'||{1}||'%') ", parameter.MemberName, parameter2.MemberName); + } + public override string StartsWith(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like {1}||'%') ", parameter.MemberName, parameter2.MemberName); + } + public override string EndsWith(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like '%'||{1}) ", parameter.MemberName, parameter2.MemberName); + } + public override string Trim(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" trim({0}) ", parameter.MemberName); + } + public override string DateIsSameDay(MethodCallExpressionModel model) + { + throw new NotSupportedException("Oracle NotSupportedException DateIsSameDay"); + } + public override string DateIsSameByType(MethodCallExpressionModel model) + { + throw new NotSupportedException("Oracle NotSupportedException DateIsSameDay"); + } + public override string Length(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" LENGTH({0}) ", parameter.MemberName); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs new file mode 100644 index 000000000..d6eb4e8f6 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleInsertBuilder.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class OracleInsertBuilder : InsertBuilder + { + public override string SqlTemplate + { + get + { + return @"INSERT INTO {0} + ({1}) + VALUES + ({2}) "; + + } + } + public override string SqlTemplateBatch + { + get + { + return "INSERT INTO {0} ({1})"; + } + } + public override string ToSqlString() + { + var identities = this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).ToList(); + if (IsNoInsertNull) + { + DbColumnInfoList = DbColumnInfoList.Where(it => it.Value != null).ToList(); + } + var groupList = DbColumnInfoList.GroupBy(it => it.TableId).ToList(); + var isSingle = groupList.Count() == 1; + string columnsString = string.Join(",", groupList.First().Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); + if (isSingle) + { + string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.DbColumnName)); + if (identities.HasValue()) + { + columnsString = columnsString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); + columnParametersString = columnParametersString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => it.OracleSequenceName + ".nextval")); + } + return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString); + } + else + { + StringBuilder batchInsetrSql = new StringBuilder(); + int pageSize = 200; + int pageIndex = 1; + int totalRecord = groupList.Count; + int pageCount = (totalRecord + pageSize - 1) / pageSize; + if (identities.HasValue()) + { + columnsString = columnsString.TrimEnd(',') + "," + string.Join(",", identities.Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); + } + while (pageCount >= pageIndex) + { + batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString); + int i = 0; + foreach (var columns in groupList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList()) + { + var isFirst = i == 0; + if (!isFirst) + { + batchInsetrSql.Append(SqlTemplateBatchUnion); + } + var insertColumns = string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), Builder.GetTranslationColumnName(it.DbColumnName)))); + if (identities.HasValue()) + { + insertColumns = insertColumns.TrimEnd(',') + "," + string.Join(",", identities.Select(it => + { + var seqValue = this.OracleSeqInfoList[it.OracleSequenceName]; + this.OracleSeqInfoList[it.OracleSequenceName] = this.OracleSeqInfoList[it.OracleSequenceName] + 1; + return seqValue + 1+" AS "+it.DbColumnName; + })); + } + batchInsetrSql.Append("\r\n SELECT " + insertColumns + " FROM DUAL "); + ++i; + } + pageIndex++; + batchInsetrSql.Append("\r\n;\r\n"); + } + return "BEGIN\r\n"+ batchInsetrSql.ToString()+"\r\nEND;"; + } + } + public override object FormatValue(object value) + { + if (value == null) + { + return "NULL"; + } + else + { + var type = value.GetType(); + if (type == UtilConstants.DateType) + { + var date = value.ObjToDate(); + if (date < Convert.ToDateTime("1900-1-1")) + { + date = Convert.ToDateTime("1900-1-1"); + } + return "to_date('"+ date.ToString("yyyy-MM-dd HH:mm:ss") + "', 'YYYY-MM-DD HH24:MI:SS') "; + } + else if (type.IsEnum()) + { + return Convert.ToInt64(value); + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) + { + return "N'" + value.ToString().ToSqlFilter() + "'"; + } + else + { + return "N'" + value.ToString() + "'"; + } + } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleQueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleQueryBuilder.cs new file mode 100644 index 000000000..b81f025e7 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleQueryBuilder.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class OracleQueryBuilder : QueryBuilder + { + public override bool IsComplexModel(string sql) + { + return Regex.IsMatch(sql, @"AS ""\w+\.\w+"""); + } + public override string SqlTemplate + { + get + { + return "SELECT {0}{"+UtilConstants.ReplaceKey+"} FROM {1}{2}{3}{4}"; + } + } + public override string ToSqlString() + { + string oldOrderBy = this.OrderByValue; + string externalOrderBy = oldOrderBy; + var isIgnoreOrderBy = this.IsCount && this.PartitionByValue.IsNullOrEmpty(); + AppendFilter(); + sql = new StringBuilder(); + if (this.OrderByValue == null && (Skip != null || Take != null)) this.OrderByValue = " ORDER BY "+ this.Builder.SqlDateNow + " "; + if (this.PartitionByValue.HasValue()) + { + this.OrderByValue = this.PartitionByValue + this.OrderByValue; + } + var isRowNumber = Skip != null || Take != null; + var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString); + string groupByValue = GetGroupByString + HavingInfos; + string orderByValue = (!isRowNumber && this.OrderByValue.HasValue()) ? GetOrderByString : null; + if (isIgnoreOrderBy) { orderByValue = null; } + sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, groupByValue, orderByValue); + sql.Replace(UtilConstants.ReplaceKey, isRowNumber ? (isIgnoreOrderBy ? null : rowNumberString) : null); + if (isIgnoreOrderBy) { this.OrderByValue = oldOrderBy; return sql.ToString(); } + var result = ToPageSql(sql.ToString(), this.Take, this.Skip); + if (ExternalPageIndex > 0) + { + if (externalOrderBy.IsNullOrEmpty()) + { + externalOrderBy = " ORDER BY "+ this.Builder.SqlDateNow + " "; + } + result = string.Format("SELECT *,ROW_NUMBER() OVER({0}) AS RowIndex2 FROM ({1}) ExternalTable ", GetExternalOrderBy(externalOrderBy), result); + result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true); + } + this.OrderByValue = oldOrderBy; + return result; + } + public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false) + { + string temp = isExternal ? ExternalPageTempalte : PageTempalte; + if (skip != null && take == null) + { + return string.Format(temp, sql.ToString(), skip.ObjToInt() + 1, long.MaxValue); + } + else if (skip == null && take != null) + { + return string.Format(temp, sql.ToString(), 1, take.ObjToInt()); + } + else if (skip != null && take != null) + { + return string.Format(temp, sql.ToString(), skip.ObjToInt() + 1, skip.ObjToInt() + take.ObjToInt()); + } + else + { + return sql.ToString(); + } + } + + public override string ToPageSql2(string sql, int? pageIndex, int? pageSize, bool isExternal = false) + { + string temp = isExternal ? ExternalPageTempalte : PageTempalte; + return string.Format(temp, sql.ToString(), (pageIndex - 1) * pageSize + 1, pageIndex * pageSize); + } + + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs new file mode 100644 index 000000000..242d87074 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class OracleUpdateBuilder : UpdateBuilder + { + protected override string TomultipleSqlString(List> groupList) + { + throw new NotSupportedException("Oracle Waiting for updates updateable(List)"); + } + public override object FormatValue(object value) + { + if (value == null) + { + return "NULL"; + } + else + { + var type = value.GetType(); + if (type == UtilConstants.DateType) + { + var date = value.ObjToDate(); + if (date < Convert.ToDateTime("1900-1-1")) + { + date = Convert.ToDateTime("1900-1-1"); + } + return "to_date('" + date.ToString("yyyy-MM-dd HH:mm:ss") + "', 'YYYY-MM-DD HH24:MI:SS') "; + } + else if (type.IsEnum()) + { + return Convert.ToInt64(value); + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) + { + return "N'" + value.ToString().ToSqlFilter() + "'"; + } + else + { + return "N'" + value.ToString() + "'"; + } + } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs new file mode 100644 index 000000000..1bbf8cf25 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class OracleUpdateable : UpdateableProvider where T : class, new() + { + protected override List GetIdentityKeys() + { + return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs index 5c9d8e481..4fe392862 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/DbBind/SqlServerDbBind.cs @@ -35,6 +35,7 @@ namespace SqlSugar new KeyValuePair("numeric",CSharpDataType.@decimal), new KeyValuePair("smallmoney",CSharpDataType.@decimal), new KeyValuePair("float",CSharpDataType.@double), + new KeyValuePair("float",CSharpDataType.Single), new KeyValuePair("real",CSharpDataType.@float), new KeyValuePair("smallint",CSharpDataType.@short), new KeyValuePair("tinyint",CSharpDataType.@byte), diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlServerProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlServerProvider.cs index 972af9be1..2164d3790 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlServerProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/SqlServer/SqlServerProvider.cs @@ -64,7 +64,7 @@ namespace SqlSugar { sqlCommand.Transaction = (SqlTransaction)this.Transaction; } - if (parameters.IsValuable()) + if (parameters.HasValue()) { IDataParameter[] ipars = ToIDbDataParameter(parameters); sqlCommand.Parameters.AddRange((SqlParameter[])ipars); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/CodeFirst/SqliteCodeFirst.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/CodeFirst/SqliteCodeFirst.cs index dce49d4a2..a7bba2c5b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/CodeFirst/SqliteCodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/CodeFirst/SqliteCodeFirst.cs @@ -13,7 +13,7 @@ namespace SqlSugar string backupName = tableName + DateTime.Now.ToString("yyyyMMddHHmmss"); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); - if (entityInfo.Columns.IsValuable()) + if (entityInfo.Columns.HasValue()) { foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false)) { @@ -31,7 +31,7 @@ namespace SqlSugar string backupName=tableName+DateTime.Now.ToString("yyyyMMddHHmmss"); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); - if (entityInfo.Columns.IsValuable()) + if (entityInfo.Columns.HasValue()) { foreach (var item in entityInfo.Columns.Where(it=>it.IsIgnore==false)) { @@ -45,9 +45,9 @@ namespace SqlSugar { var result = new DbColumnInfo() { - DataType = this.Context.Ado.DbBind.GetDbTypeName(UtilMethods.GetUnderType(item.PropertyInfo).Name), + DataType = item.PropertyInfo.PropertyType.IsEnum?this.Context.Ado.DbBind.GetDbTypeName(UtilConstants.IntType.Name) :this.Context.Ado.DbBind.GetDbTypeName(UtilMethods.GetUnderType(item.PropertyInfo).Name), TableId = entityInfo.Columns.IndexOf(item), - DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, + DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName, IsPrimarykey = item.IsPrimarykey, IsIdentity = item.IsIdentity, TableName = tableName, diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbBind/SqliteDbBind.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbBind/SqliteDbBind.cs index b26114af1..f84f93d7f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbBind/SqliteDbBind.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbBind/SqliteDbBind.cs @@ -21,7 +21,7 @@ namespace SqlSugar if (csharpTypeName == "Boolean") csharpTypeName = "bool"; var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); - return mappings.IsValuable() ? mappings.First().Key : "varchar"; + return mappings.HasValue() ? mappings.First().Key : "varchar"; } public override List> MappingTypes { @@ -57,6 +57,7 @@ namespace SqlSugar new KeyValuePair("int16",CSharpDataType.@short), new KeyValuePair("bigint",CSharpDataType.@long), new KeyValuePair("int64",CSharpDataType.@long), + new KeyValuePair("long",CSharpDataType.@long), new KeyValuePair("integer64",CSharpDataType.@long), new KeyValuePair("bit",CSharpDataType.@bool), new KeyValuePair("bool",CSharpDataType.@bool), @@ -64,6 +65,7 @@ namespace SqlSugar new KeyValuePair("real",CSharpDataType.@double), new KeyValuePair("double",CSharpDataType.@double), new KeyValuePair("float",CSharpDataType.@float), + new KeyValuePair("float",CSharpDataType.Single), new KeyValuePair("decimal",CSharpDataType.@decimal), new KeyValuePair("dec",CSharpDataType.@decimal), new KeyValuePair("numeric",CSharpDataType.@decimal), diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbMaintenance/SqliteDbMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbMaintenance/SqliteDbMaintenance.cs index d17866631..018c47a37 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbMaintenance/SqliteDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/DbMaintenance/SqliteDbMaintenance.cs @@ -169,12 +169,7 @@ namespace SqlSugar { string cacheKey = "DbMaintenanceProvider.GetColumnInfosByTableName." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); cacheKey = GetCacheKey(cacheKey); - return this.Context.RewritableMethods.GetCacheInstance>().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate>(cacheKey,() => { string sql = "PRAGMA table_info(" + tableName + ")"; var oldIsEnableLog = this.Context.Ado.IsEnableLogEvent; @@ -213,7 +208,7 @@ namespace SqlSugar public override bool CreateTable(string tableName, List columns) { - if (columns.IsValuable()) + if (columns.HasValue()) { foreach (var item in columns) { @@ -266,12 +261,7 @@ namespace SqlSugar } private List GetListOrCache(string cacheKey, string sql) { - return this.Context.RewritableMethods.GetCacheInstance>().Func(cacheKey, - (cm, key) => - { - return cm[cacheKey]; - - }, (cm, key) => + return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate>(cacheKey, () => { var isEnableLogEvent = this.Context.Ado.IsEnableLogEvent; this.Context.Ado.IsEnableLogEvent = false; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqliteProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqliteProvider.cs index 4e98f9165..7f0916b2e 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqliteProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqliteProvider.cs @@ -62,7 +62,7 @@ namespace SqlSugar { sqlCommand.Transaction = (SqliteTransaction)this.Transaction; } - if (parameters.IsValuable()) + if (parameters.HasValue()) { IDataParameter[] ipars = ToIDbDataParameter(parameters); sqlCommand.Parameters.AddRange((SqliteParameter[])ipars); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj index af0f0ecb6..cccf55df1 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj @@ -12,6 +12,7 @@ + diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs index 150b3d51a..bd58429b8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs @@ -34,7 +34,8 @@ namespace SqlSugar DependencyManagement.TrySqlite(); break; case DbType.Oracle: - throw new Exception("Oracle developed 60%,to be continued"); + DependencyManagement.TryOracle(); + break; default: throw new Exception("ConnectionConfig.DbType is null"); } @@ -52,7 +53,6 @@ namespace SqlSugar if (_Ado == null) { var reval = InstanceFactory.GetAdo(base.CurrentConnectionConfig); - Check.ConnectionConfig(base.CurrentConnectionConfig); _Ado = reval; reval.Context = this; return reval; @@ -68,17 +68,20 @@ namespace SqlSugar #region Util Methods [Obsolete("Use SqlSugarClient.Utilities")] - public virtual IRewritableMethods RewritableMethods + public virtual IContextMethods RewritableMethods { get { return this.Utilities; } set { this.Utilities = value; } } - public virtual IRewritableMethods Utilities + public virtual IContextMethods Utilities { get { if (base._RewritableMethods == null) - base._RewritableMethods = new RewritableMethods(); + { + base._RewritableMethods = new ContextMethods(); + base._RewritableMethods.Context = this; + } return _RewritableMethods; } set { base._RewritableMethods = value; } @@ -319,7 +322,7 @@ namespace SqlSugar var sqlObj = item.ToSql(); string sql = sqlObj.Key; UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i); - if (sqlObj.Value.IsValuable()) + if (sqlObj.Value.HasValue()) allItems.Add(new KeyValuePair>(sql, sqlObj.Value)); else allItems.Add(new KeyValuePair>(sql, new List())); @@ -342,7 +345,7 @@ namespace SqlSugar public ISugarQueryable SqlQueryable(string sql) where T : class, new() { var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); - return this.Queryable().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())); + return this.Queryable().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).Select("*"); } #endregion diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/Check.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/Check.cs index 3a766d5cb..837282759 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/Check.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/Check.cs @@ -12,14 +12,6 @@ namespace SqlSugar throw new UtilExceptions("SqlSugarException.NotSupportedException:" + message); } - public static void ConnectionConfig(ConnectionConfig config) - { - if (config == null || config.ConnectionString.IsNullOrEmpty() || config.DbType.IsNullOrEmpty()) - { - throw new UtilExceptions("SqlSugarException.ArgumentNullException:" + ErrorMessage.ConnectionConfigIsNull); - } - } - public static void ArgumentNullException(object checkObj, string message) { if (checkObj == null) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs index 4e5c4eace..41c710b6f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs @@ -6,32 +6,6 @@ namespace SqlSugar { internal static partial class ErrorMessage { - internal static string FilterError - { - get - { - return GetThrowMessage("The query parameter does not allow the existence of special combination, for example: %+number+anyword+% Or 0x+anyword+0", - "参数不能允许存在特殊组合,例如 :% + 数字 + 任意字符 + % 或者 0x + 任意字符 + 0"); - } - } - - internal static string EntityNamespaceError - { - get - { - return GetThrowMessage("ConnectionConfig.EntityNamespace cannot be null.", - "ConnectionConfig.EntityNamespace 不能为null。"); - } - } - - internal static string ConnectionConfigIsNull - { - get - { - return GetThrowMessage("CurrentConnectionConfig and CurrentConnectionConfig attributes can't be null", - "CurrentConnectionConfig和它的属性不能为null。"); - } - } internal static string ObjNotExist { get diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilConstants.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilConstants.cs index 224e05f84..ebfe0199b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilConstants.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilConstants.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Dynamic; using System.Linq; using System.Text; namespace SqlSugar @@ -27,6 +28,7 @@ namespace SqlSugar internal static Type DateType = typeof(DateTime); internal static Type ByteArrayType = typeof(byte[]); internal static Type ModelType= typeof(ModelContext); + internal static Type DynamicType = typeof(ExpandoObject); internal static Type Dicii = typeof(KeyValuePair); internal static Type DicIS = typeof(KeyValuePair); internal static Type DicSi = typeof(KeyValuePair); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs index 685fd5541..8caf4b847 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs @@ -5,6 +5,8 @@ using System.Data.SqlClient; using System.Linq; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; + namespace SqlSugar { public class UtilMethods @@ -57,7 +59,7 @@ namespace SqlSugar internal static void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex) { - if (appendSql.IsValuable() && parameters.IsValuable()) + if (appendSql.HasValue() && parameters.HasValue()) { foreach (var parameter in parameters.OrderByDescending(it => it.ParameterName.Length)) { @@ -74,5 +76,21 @@ namespace SqlSugar { return string.Format(" ({0}) {1} ", sql, shortName); } + + internal static string GetParenthesesValue(string dbTypeName) + { + if (Regex.IsMatch(dbTypeName, @"\(.+\)")) + { + dbTypeName = Regex.Replace(dbTypeName, @"\(.+\)", ""); + } + dbTypeName = dbTypeName.Trim(); + return dbTypeName; + } + + internal static T GetOldValue(T value, Action action) + { + action(); + return value; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ValidateExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ValidateExtensions.cs index 7cec587f8..56c670467 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ValidateExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ValidateExtensions.cs @@ -51,13 +51,13 @@ namespace SqlSugar return false; } - public static bool IsValuable(this object thisValue) + public static bool HasValue(this object thisValue) { if (thisValue == null || thisValue == DBNull.Value) return false; return thisValue.ToString() != ""; } - public static bool IsValuable(this IEnumerable thisValue) + public static bool HasValue(this IEnumerable thisValue) { if (thisValue == null || thisValue.Count() == 0) return false; return true; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite index 66fabaf3b..2d882282c 100644 Binary files a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite and b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite differ