From 7d25c66f80a709ed0e5affe736b42e17269c0c60 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 21 Apr 2022 00:08:13 +0800 Subject: [PATCH] Update core --- .../DbFirstProvider/DbFirstProvider.cs | 11 +++++-- .../Abstract/FastestProvider/FastBuilder.cs | 1 + .../FastestProvider/FastestProvider.cs | 29 +++++++++++++++++++ .../SqlSugar/Interface/IDbFirst.cs | 1 + .../SqlSugar/Interface/IFastBuilder.cs | 1 + .../SqlBuilder/SqlServerFastBuilder.cs | 1 + .../Sqlite/SqlBuilder/SqliteFastBuilder.cs | 1 + 7 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs index 93a72cd88..a6b7718e0 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbFirstProvider/DbFirstProvider.cs @@ -21,7 +21,8 @@ namespace SqlSugar private bool IsDefaultValue { get; set; } private Func WhereColumnsfunc; private Func FormatFileNameFunc { get; set; } - private bool IsStringNullable {get;set;} + private bool IsStringNullable {get;set; } + private Func PropertyTextTemplateFunc { get; set; } private ISqlBuilder SqlBuilder { get @@ -97,6 +98,11 @@ namespace SqlSugar this.PropertyTemplate = func(this.PropertyTemplate); return this; } + public IDbFirst SettingPropertyTemplate(Func func) + { + this.PropertyTextTemplateFunc = func; + return this; + } public RazorFirst UseRazorAnalysis(string razorClassTemplate, string classNamespace = "Models") { if (razorClassTemplate == null) @@ -264,7 +270,7 @@ namespace SqlSugar string PropertyDescriptionText = this.PropertyDescriptionTemplate; string propertyName = GetPropertyName(item); string propertyTypeName = GetPropertyTypeName(item); - PropertyText = GetPropertyText(item, PropertyText); + PropertyText =this.PropertyTextTemplateFunc == null? GetPropertyText(item, PropertyText):this.PropertyTextTemplateFunc(item,this.PropertyTemplate, propertyTypeName); PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText); PropertyText = PropertyDescriptionText + PropertyText; classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName))); @@ -284,6 +290,7 @@ namespace SqlSugar classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); return classText; } + internal string GetClassString(List columns, ref string className) { string classText = this.ClassTemplate; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs index 441e7a6cb..89c46e37c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastBuilder.cs @@ -9,6 +9,7 @@ namespace SqlSugar { public class FastBuilder { + public virtual bool IsActionUpdateColumns { get; set; } public SqlSugarProvider Context { get; set; } public virtual string CharacterSet { get; set; } public virtual string UpdateSql { get; set; } = @"UPDATE TM diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index e8fa15590..03c7d5515 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -128,6 +128,7 @@ namespace SqlSugar this.context.CurrentConnectionConfig.IsAutoCloseConnection = false; DataTable dt = ToDdateTable(datas); IFastBuilder buider = GetBuider(); + ActionIgnoreColums(whereColumns, updateColumns, dt, buider.IsActionUpdateColumns); buider.Context = context; await buider.CreateTempAsync(dt); await buider.ExecuteBulkCopyAsync(dt); @@ -142,6 +143,34 @@ namespace SqlSugar End(datas, false); return result; } + + private void ActionIgnoreColums(string[] whereColumns, string[] updateColumns, DataTable dt,bool IsActionUpdateColumns) + { + if (entityInfo.Columns.Where(it => it.IsIgnore == false).Count() > whereColumns.Length + updateColumns.Length &&IsActionUpdateColumns) + { + var ignoreColums = dt.Columns.Cast() + .Where(it => !whereColumns.Any(y => y.EqualCase(it.ColumnName))) + .Where(it => !updateColumns.Any(y => y.EqualCase(it.ColumnName))).ToList(); + foreach (DataRow item in dt.Rows) + { + foreach (var col in ignoreColums) + { + if (item[col.ColumnName].IsNullOrEmpty()) + { + if (col.DataType == UtilConstants.StringType) + { + item[col.ColumnName] = string.Empty; + } + else + { + item[col.ColumnName] = Activator.CreateInstance(col.DataType); + } + } + } + } + } + } + private async Task _BulkUpdate(string tableName,DataTable dataTable, string[] whereColumns, string[] updateColumns) { var datas = new string[dataTable.Rows.Count].ToList(); diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs index 2c4883610..7654a35b5 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IDbFirst.cs @@ -10,6 +10,7 @@ namespace SqlSugar IDbFirst SettingClassTemplate(Func func); IDbFirst SettingClassDescriptionTemplate(Func func); IDbFirst SettingPropertyTemplate(Func func); + IDbFirst SettingPropertyTemplate(Func func); IDbFirst SettingPropertyDescriptionTemplate(Func func); IDbFirst SettingConstructorTemplate(Func func); IDbFirst SettingNamespaceTemplate(Func func); diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs index c36eb3276..3a68de8a2 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IFastBuilder.cs @@ -9,6 +9,7 @@ namespace SqlSugar { public interface IFastBuilder { + bool IsActionUpdateColumns { get; set; } SqlSugarProvider Context { get; set; } string CharacterSet { get; set; } Task UpdateByTempAsync(string tableName,string tempName,string [] updateColumns,string[] whereColumns); diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs index 502d35c13..1dfe3b759 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerFastBuilder.cs @@ -12,6 +12,7 @@ namespace SqlSugar public class SqlServerFastBuilder:FastBuilder,IFastBuilder { + public override bool IsActionUpdateColumns { get; set; } = true; public async Task ExecuteBulkCopyAsync(DataTable dt) { diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs index 77f8ecd62..0d3423d4c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteFastBuilder.cs @@ -14,6 +14,7 @@ namespace SqlSugar private bool IsUpdate = false; public string CharacterSet { get; set; } private DataTable UpdateDataTable { get; set; } + public bool IsActionUpdateColumns { get; set; } public SqliteFastBuilder(EntityInfo entityInfo) { this.entityInfo = entityInfo;