From 405978ba63d18658ac09f0687742fe503652f644 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 28 May 2023 20:59:16 +0800 Subject: [PATCH] Synchronization code --- .../CodeFirstProvider/CodeFirstProvider.cs | 2 ++ .../DeleteProvider/DeleteableProvider.cs | 2 ++ .../InsertableProvider/InsertableProvider.cs | 2 ++ .../QueryableProvider/QueryableProvider.cs | 3 +++ .../Abstract/SugarProvider/SqlSugarProvider.cs | 4 ++++ .../UpdateProvider/UpdateableProvider.cs | 2 ++ .../SpliteTable/SplitTableAttribute.cs | 10 ++++++++++ .../SqlSugar/Utilities/UtilMethods.cs | 18 ++++++++++++++++++ 8 files changed, 43 insertions(+) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index e67d4dbcc..52aeea891 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -54,8 +54,10 @@ namespace SqlSugar var mappingInfo=this.Context.MappingTables.FirstOrDefault(it => it.EntityName == entityType.Name); if (mappingInfo == null) { + UtilMethods.StartCustomSplitTable(this.Context,entityType); this.Context.CodeFirst.SplitTables().InitTables(entityType); this.Context.MappingTables.RemoveAll(it=>it.EntityName==entityType.Name); + UtilMethods.EndCustomSplitTable(this.Context, entityType); return; } } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 2cd204836..62a912d9b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -350,6 +350,7 @@ namespace SqlSugar } public SplitTableDeleteProvider SplitTable(Func, IEnumerable> getTableNamesFunc) { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName); SplitTableDeleteProvider result = new SplitTableDeleteProvider(); result.Context = this.Context; @@ -364,6 +365,7 @@ namespace SqlSugar } public SplitTableDeleteByObjectProvider SplitTable() { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); SplitTableDeleteByObjectProvider result = new SplitTableDeleteByObjectProvider(); result.Context = this.Context; Check.ExceptionEasy(this.DeleteObjects == null, "SplitTable() +0 only List can be deleted", "SplitTable()无参数重载只支持根据实体集合删除"); diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index cb43cbf71..3e2948389 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -665,6 +665,7 @@ namespace SqlSugar } public SplitInsertable SplitTable(SplitType splitType) { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); SplitTableContext helper = new SplitTableContext(Context) { EntityInfo = this.EntityInfo @@ -688,6 +689,7 @@ namespace SqlSugar public SplitInsertable SplitTable() { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); var splitTableAttribute = typeof(T).GetCustomAttribute(); if (splitTableAttribute != null) { diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 8bbd5a177..021b2a970 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1262,11 +1262,13 @@ namespace SqlSugar } public ISugarQueryable SplitTable() { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); //all table return this.SplitTable(tag => tag); } public ISugarQueryable SplitTable(DateTime beginTime, DateTime endTime) { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); var splitColumn = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute() != null); Check.ExceptionEasy(splitColumn==null,"[SplitFieldAttribute] need to be added to the table field", "需要在分表字段加上属性[SplitFieldAttribute]"); var columnName = this.SqlBuilder.GetTranslationColumnName(splitColumn.DbColumnName); @@ -1307,6 +1309,7 @@ namespace SqlSugar } public ISugarQueryable SplitTable(Func, IEnumerable> getTableNamesFunc) { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); SplitTableContext helper = new SplitTableContext(Context) { EntityInfo = this.EntityInfo diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index ce83da140..45275c84a 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -1599,6 +1599,7 @@ namespace SqlSugar #region Split table public SplitTableContext SplitHelper() where T : class, new() { + UtilMethods.StartCustomSplitTable(this, typeof(T)); var result = new SplitTableContext(this.Context) { EntityInfo = this.Context.EntityMaintenance.GetEntityInfo() @@ -1607,6 +1608,7 @@ namespace SqlSugar } public SplitTableContext SplitHelper(Type entityType) { + UtilMethods.StartCustomSplitTable(this,entityType); var result = new SplitTableContext(this.Context) { EntityInfo = this.Context.EntityMaintenance.GetEntityInfo(entityType) @@ -1615,6 +1617,7 @@ namespace SqlSugar } public SplitTableContextResult SplitHelper(T data) where T : class, new() { + UtilMethods.StartCustomSplitTable(this, typeof(T)); var result = new SplitTableContext(this.Context) { EntityInfo = this.Context.EntityMaintenance.GetEntityInfo() @@ -1627,6 +1630,7 @@ namespace SqlSugar } public SplitTableContextResult SplitHelper(List data) where T : class, new() { + UtilMethods.StartCustomSplitTable(this, typeof(T)); var result = new SplitTableContext(this.Context) { EntityInfo = this.Context.EntityMaintenance.GetEntityInfo() diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 7460a9453..d1058d5c5 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -221,6 +221,7 @@ namespace SqlSugar } public SplitTableUpdateProvider SplitTable(Func, IEnumerable> getTableNamesFunc) { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); this.Context.MappingTables.Add(this.EntityInfo.EntityName, this.EntityInfo.DbTableName); SplitTableUpdateProvider result = new SplitTableUpdateProvider(); result.Context = this.Context; @@ -235,6 +236,7 @@ namespace SqlSugar } public SplitTableUpdateByObjectProvider SplitTable() { + UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); Check.ExceptionEasy(UpdateParameterIsNull, "SplitTable() not supported db.Updateable(),use db.Updateable(list)", ".SplitTable()不支持 db.Updateable()方式更新,请使用 db.Updateable(list) 对象方式更新, 或者使用 .SplitTable(+1)重载"); SplitTableUpdateByObjectProvider result = new SplitTableUpdateByObjectProvider(); result.Context = this.Context; diff --git a/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableAttribute.cs b/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableAttribute.cs index 3a1cfcd69..301db92e7 100644 --- a/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableAttribute.cs +++ b/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableAttribute.cs @@ -10,10 +10,20 @@ namespace SqlSugar public class SplitTableAttribute : Attribute { public SplitType SplitType { get; set; } + public Type CustomSplitTableService { get; set; } public SplitTableAttribute(SplitType splitType) { this.SplitType = splitType; } + public SplitTableAttribute(SplitType splitType,Type customSplitTableService) + { + this.SplitType = splitType; + if (!customSplitTableService.GetInterfaces().Any(it => it == typeof(ISplitTableService))) + { + Check.ExceptionEasy("customSplitTableService in SplitTableAttribute(SplitType splitType,Type customSplitTableService) must be inherited ISplitTableService", " SplitTableAttribute(SplitType splitType,Type customSplitTableService) 中的 customSplitTableService 必须继承 ISplitTableService"); + } + this.CustomSplitTableService= customSplitTableService; + } } [AttributeUsage(AttributeTargets.Property, Inherited = true)] diff --git a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs index 1f1bef142..f36fa9526 100644 --- a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs @@ -17,6 +17,24 @@ namespace SqlSugar { public class UtilMethods { + internal static void EndCustomSplitTable(ISqlSugarClient context,Type entityType) + { + var splitTableAttribute = entityType.GetCustomAttribute(); + if (splitTableAttribute.CustomSplitTableService != null) + { + context.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService = null; + } + } + + internal static void StartCustomSplitTable(ISqlSugarClient context, Type entityType) + { + var splitTableAttribute = entityType.GetCustomAttribute(); + if (splitTableAttribute.CustomSplitTableService != null) + { + context.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService + = (ISplitTableService)Activator.CreateInstance(splitTableAttribute.CustomSplitTableService); + } + } public static void ConvertParameter(SugarParameter p, ISqlBuilder builder) { if (!p.ParameterName.StartsWith(builder.SqlParameterKeyWord))