From 6bde63bb3906726bc0b468ba4db679ca23199d64 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 26 Feb 2025 15:52:49 +0800 Subject: [PATCH] Update TDengine --- .../TDengine/CodeFirst/TDengineCodeFirst.cs | 17 +++++++ .../TDengine/Insertable/TagInserttable.cs | 45 +++++++++++++++++++ .../Tools/UtilExtensions.cs | 7 +++ 3 files changed, 69 insertions(+) create mode 100644 Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs diff --git a/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/CodeFirst/TDengineCodeFirst.cs b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/CodeFirst/TDengineCodeFirst.cs index bfd6be906..af7ab9ff6 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/CodeFirst/TDengineCodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/CodeFirst/TDengineCodeFirst.cs @@ -18,7 +18,24 @@ namespace SqlSugar.TDengine var tableName = GetTableName(entityInfo); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName, false); ConvertColumns(dbColumns); + var attr = entityInfo.Type.GetCustomAttribute(); var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); + if (attr != null && attr.Tag1 != null) + { + entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false + || it.DbColumnName?.ToLower() == attr.Tag1?.ToLower() + || it.DbColumnName?.ToLower() == attr.Tag2?.ToLower() + || it.DbColumnName?.ToLower() == attr.Tag3?.ToLower() + || it.DbColumnName?.ToLower() == attr.Tag4?.ToLower() + ).ToList(); + foreach (var item in entityColumns) + { + if (item.DbColumnName == null) + { + item.DbColumnName = item.PropertyName; + } + } + } var dropColumns = dbColumns .Where(dc => !entityColumns.Any(ec => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase))) .Where(dc => !entityColumns.Any(ec => dc.DbColumnName.Equals(ec.DbColumnName, StringComparison.CurrentCultureIgnoreCase))) diff --git a/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs new file mode 100644 index 000000000..b7866e6e0 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar.TDengineCore/TDengine/Insertable/TagInserttable.cs @@ -0,0 +1,45 @@ +using SqlSugar.TDengine; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace SqlSugar +{ + public class TagInserttable where T : class, new() + { + internal IInsertable thisValue; + internal Func getChildTableNamefunc; + + public int ExecuteCommand() + { + var provider = (InsertableProvider) thisValue; + var inserObjects = provider.InsertObjs; + var attr = typeof(T).GetCustomAttribute(); + Check.ExceptionEasy(attr == null|| attr?.Tag1==null, $"", $"{nameof(T)}缺少特性STableAttribute和Tag1"); + // 根据所有非空的 Tag 进行分组 + var groups = inserObjects.GroupBy(it => + { + // 动态生成分组键 + var groupKey = new List(); + + if (attr.Tag1 != null) + groupKey.Add(it.GetType().GetProperty(attr.Tag1)?.GetValue(it)?.ToString()); + + if (attr.Tag2 != null) + groupKey.Add(it.GetType().GetProperty(attr.Tag2)?.GetValue(it)?.ToString()); + + if (attr.Tag3 != null) + groupKey.Add(it.GetType().GetProperty(attr.Tag3)?.GetValue(it)?.ToString()); + + if (attr.Tag4 != null) + groupKey.Add(it.GetType().GetProperty(attr.Tag4)?.GetValue(it)?.ToString()); + + // 将非空的 Tag 值用下划线连接作为分组键 + return string.Join("_", groupKey.Where(k => !string.IsNullOrEmpty(k))); + }); + return inserObjects.Count(); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs b/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs index a69afef5d..e97bb87bf 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDengineCore/Tools/UtilExtensions.cs @@ -9,6 +9,13 @@ namespace SqlSugar.TDengine /// public static class UtilExtensions { + public static TagInserttable SetTDengineChildTableName(this IInsertable thisValue,Func getChildTableNamefunc) where T:class,new() + { + TagInserttable result = new TagInserttable(); + result.thisValue = thisValue; + result.getChildTableNamefunc = getChildTableNamefunc; + return result; + } public static string ObjToStringNoTrim(this object thisValue) { if (thisValue != null) return thisValue.ToString();