From ccaf2e63025185179a2c32dc4a6971db7720ba14 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 8 Apr 2022 21:55:46 +0800 Subject: [PATCH] Update Core --- .../IDataReaderEntityBuilder.cs | 2 +- .../DbFirstProvider/DbFirstProvider.cs | 26 ++++++++++++-- .../Abstract/DbFirstProvider/DbRazor.cs | 8 ++++- .../QueryableProvider/QueryableProvider.cs | 36 +++++++++++++++---- .../SqlBuilderProvider/QueryBuilder.cs | 2 +- .../SugarProvider/SqlSugarAccessory.cs | 4 ++- .../MethodCallExpressionResolve.cs | 15 +++++++- .../SqlSugar/Interface/IDbFirst.cs | 2 ++ Src/Asp.NetCore2/SqlSugar/SqlSugar.csproj | 19 ++++++++++ 9 files changed, 101 insertions(+), 13 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 419a01155..609cc8013 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -261,7 +261,7 @@ namespace SqlSugar if (bindProperyTypeName.IsContainsIn("int", "int32")) method = isNullableType ? getConvertInt32 : getInt32; if (bindProperyTypeName.IsContainsIn("int64")) - method = isNullableType ? getConvertInt64 : getInt64; + method = null; if (bindProperyTypeName.IsContainsIn("byte")) method = isNullableType ? getConvertByte : getByte; if (bindProperyTypeName.IsContainsIn("int16")) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs index 34057639c..93a72cd88 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs @@ -20,6 +20,8 @@ namespace SqlSugar private bool IsAttribute { get; set; } private bool IsDefaultValue { get; set; } private Func WhereColumnsfunc; + private Func FormatFileNameFunc { get; set; } + private bool IsStringNullable {get;set;} private ISqlBuilder SqlBuilder { get @@ -55,6 +57,11 @@ namespace SqlSugar } #region Setting Template + public IDbFirst StringNullable() + { + IsStringNullable = true; + return this; + } public IDbFirst SettingClassDescriptionTemplate(Func func) { this.ClassDescriptionTemplate = func(this.ClassDescriptionTemplate); @@ -137,6 +144,7 @@ namespace SqlSugar Check.Exception(true, ErrorMessage.GetThrowMessage("Need to achieve ConnectionConfig.ConfigureExternal Services.RazorService", "需要实现 ConnectionConfig.ConfigureExternal Services.RazorService接口")); } this.Context.Utilities.RemoveCacheAll(); + result.FormatFileNameFunc = this.FormatFileNameFunc; return result; } #endregion @@ -147,6 +155,11 @@ namespace SqlSugar this.IsAttribute = isCreateAttribute; return this; } + public IDbFirst FormatFileName(Func formatFileNameFunc) + { + this.FormatFileNameFunc = formatFileNameFunc; + return this; + } public IDbFirst IsCreateDefaultValue(bool isCreateDefaultValue = true) { this.IsDefaultValue = isCreateDefaultValue; @@ -319,7 +332,12 @@ namespace SqlSugar { foreach (var item in classStringList) { - var filePath = directoryPath.TrimEnd('\\').TrimEnd('/') + string.Format(seChar + "{0}.cs", item.Key); + var fileName = item.Key; + if (FormatFileNameFunc!= null) + { + fileName = FormatFileNameFunc(fileName); + } + var filePath = directoryPath.TrimEnd('\\').TrimEnd('/') + string.Format(seChar + "{0}.cs", fileName); FileHelper.CreateFile(filePath, item.Value, Encoding.UTF8); } } @@ -410,12 +428,16 @@ namespace SqlSugar } if (result == "Int32") { - result = "int"; + result = item.IsNullable?"int?":"int"; } if (result == "String") { result = "string"; } + if (result == "string" && item.IsNullable && IsStringNullable) + { + result = result + "?"; + } return result; } private string GetPropertyTypeConvert(DbColumnInfo item) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbRazor.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbRazor.cs index 7e5c6ddb5..6ab02cc8e 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbRazor.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbRazor.cs @@ -10,6 +10,7 @@ namespace SqlSugar public class RazorFirst { internal List> ClassStringList { get; set; } + internal Func FormatFileNameFunc { get; set; } public static string DefaultRazorClassTemplate = @"using System; @@ -79,7 +80,12 @@ namespace @Model.Namespace { foreach (var item in ClassStringList) { - var filePath = directoryPath.TrimEnd('\\').TrimEnd('/') + string.Format(seChar + "{0}.cs", item.Key); + var fileName = item.Key; + if (this.FormatFileNameFunc != null) + { + fileName = this.FormatFileNameFunc(fileName); + } + var filePath = directoryPath.TrimEnd('\\').TrimEnd('/') + string.Format(seChar + "{0}.cs",fileName); FileHelper.CreateFile(filePath, item.Value, Encoding.UTF8); } } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index afbe48904..a87a01915 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1123,16 +1123,28 @@ namespace SqlSugar var parentIdName =UtilConvert.ToMemberExpression((parentIdExpression as LambdaExpression).Body).Member.Name; var ParentInfo = entity.Columns.First(it => it.PropertyName == parentIdName); var parentPropertyName= ParentInfo.DbColumnName; - var current = this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).InSingle(primaryKeyValue); + var tableName= this.QueryBuilder.GetTableNameString; + if (this.QueryBuilder.IsSingle() == false) + { + if (this.QueryBuilder.JoinQueryInfos.Count>0) + { + tableName = this.QueryBuilder.JoinQueryInfos.First().TableName; + } + if (this.QueryBuilder.EasyJoinInfos.Count>0) + { + tableName = this.QueryBuilder.JoinQueryInfos.First().TableName; + } + } + var current = this.Context.Queryable().AS(tableName).InSingle(primaryKeyValue); if (current != null) { result.Add(current); object parentId = ParentInfo.PropertyInfo.GetValue(current,null); int i = 0; - while (parentId!=null&&this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).In(parentId).Any()) + while (parentId!=null&&this.Context.Queryable().AS(tableName).In(parentId).Any()) { Check.Exception(i > 100, ErrorMessage.GetThrowMessage("Dead cycle", "出现死循环或超出循环上限(100),检查最顶层的ParentId是否是null或者0")); - var parent = this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).InSingle(parentId); + var parent = this.Context.Queryable().AS(tableName).InSingle(parentId); result.Add(parent); parentId= ParentInfo.PropertyInfo.GetValue(parent, null); ++i; @@ -1148,16 +1160,28 @@ namespace SqlSugar var parentIdName = UtilConvert.ToMemberExpression((parentIdExpression as LambdaExpression).Body).Member.Name; var ParentInfo = entity.Columns.First(it => it.PropertyName == parentIdName); var parentPropertyName = ParentInfo.DbColumnName; - var current =await this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).InSingleAsync(primaryKeyValue); + var tableName = this.QueryBuilder.GetTableNameString; + if (this.QueryBuilder.IsSingle() == false) + { + if (this.QueryBuilder.JoinQueryInfos.Count > 0) + { + tableName = this.QueryBuilder.JoinQueryInfos.First().TableName; + } + if (this.QueryBuilder.EasyJoinInfos.Count > 0) + { + tableName = this.QueryBuilder.JoinQueryInfos.First().TableName; + } + } + var current =await this.Context.Queryable().AS(tableName).InSingleAsync(primaryKeyValue); if (current != null) { result.Add(current); object parentId = ParentInfo.PropertyInfo.GetValue(current, null); int i = 0; - while (parentId != null &&await this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).In(parentId).AnyAsync()) + while (parentId != null &&await this.Context.Queryable().AS(tableName).In(parentId).AnyAsync()) { Check.Exception(i > 100, ErrorMessage.GetThrowMessage("Dead cycle", "出现死循环或超出循环上限(100),检查最顶层的ParentId是否是null或者0")); - var parent =await this.Context.Queryable().AS(this.QueryBuilder.GetTableNameString).InSingleAsync(parentId); + var parent =await this.Context.Queryable().AS(tableName).InSingleAsync(parentId); result.Add(parent); parentId = ParentInfo.PropertyInfo.GetValue(parent, null); ++i; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 105bf0434..7fb323867 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -652,7 +652,7 @@ namespace SqlSugar result = result.Replace(" ) unionTable ", ") "+TableShortName + UtilConstants.Space); TableShortName = null; } - if (this.TableShortName.HasValue()) + if (this.TableShortName.HasValue()&&!IsSqlQuery) { result += (TableShortName + UtilConstants.Space); } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 623b195ba..eff04d767 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs @@ -199,7 +199,9 @@ namespace SqlSugar OldDbColumnName = item.OldDbColumnName, OracleSequenceName = item.OracleSequenceName, PropertyInfo = item.PropertyInfo, - PropertyName = item.PropertyName + PropertyName = item.PropertyName, + IsArray=item.IsArray, + IsJson=item.IsJson }; columns.Add(item); } diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index bb29335be..1b623c10a 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -547,6 +547,14 @@ namespace SqlSugar { parameter.CommonTempData = DateTime.Now.Date; } + else if (item is ConditionalExpression) + { + parameter.CommonTempData = GetNewExpressionValue(item); + } + else if (IsNot(item)) + { + parameter.CommonTempData = GetNewExpressionValue(item); + } else if (IsDateDate(item)) { parameter.CommonTempData = GetNewExpressionValue(item); @@ -585,7 +593,7 @@ namespace SqlSugar methodCallExpressionArgs.IsMember = false; } } - if (IsDateDate(item) || IsDateValue(item)|| IsDateItemValue(item)) + if (IsDateDate(item) || IsDateValue(item) || IsDateItemValue(item) || item is ConditionalExpression||IsNot(item)) { methodCallExpressionArgs.IsMember = true; } @@ -608,6 +616,11 @@ namespace SqlSugar parameter.ChildExpression = null; } + private static bool IsNot(Expression item) + { + return item is UnaryExpression && (item as UnaryExpression).NodeType == ExpressionType.Not; + } + private bool IsDateItemValue(Expression item) { var result = false; diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs index 0cc4302a2..2c4883610 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs @@ -23,5 +23,7 @@ namespace SqlSugar void CreateClassFile(string directoryPath, string nameSpace = "Models"); Dictionary ToClassStringList(string nameSpace = "Models"); void Init(); + IDbFirst FormatFileName(Func formatFileNameFunc); + IDbFirst StringNullable(); } } diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugar.csproj b/Src/Asp.NetCore2/SqlSugar/SqlSugar.csproj index 01f9c9255..5d93ce5f6 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugar.csproj @@ -35,6 +35,25 @@ + + + + + + + + + + + + + + + + + + +