From c96f8bd454cdec184d9dd4a66e9ccac559ad0414 Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 30 Oct 2021 15:12:57 +0800 Subject: [PATCH] Split table --- .../SqlServerTest/Demo/DemoN_SplitTable.cs | 2 +- .../InsertableProvider/InsertableProvider.cs | 13 ++++++- .../InsertableProvider/SplitInsertable.cs | 39 +++++++++---------- .../IntegrationServices/SplitTableService.cs | 2 +- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demo/DemoN_SplitTable.cs b/Src/Asp.Net/SqlServerTest/Demo/DemoN_SplitTable.cs index ca7e5bd3a..da3449cd4 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/DemoN_SplitTable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/DemoN_SplitTable.cs @@ -48,7 +48,7 @@ namespace OrmTest //按日分表 var x3 = db.Insertable(new OrderSpliteTest() { Name="A" }).SplitTable().ExecuteCommand(); ////强制分表类型 - //var x4 = db.Insertable(new OrderSpliteTest() { Name = "A" }).SplitTable(SplitType.Day).ExecuteCommand(); + var x4 = db.Insertable(new OrderSpliteTest() { Name = "A" ,Time=DateTime.Now.AddDays(-1) }).SplitTable().ExecuteCommand(); Console.WriteLine("#### CodeFirst end ####"); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 64b98de7a..b7c2dbccd 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; +using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -431,8 +432,16 @@ namespace SqlSugar public SplitInsertable SplitTable() { - SplitType SplitType = SplitType.Day; - return SplitTable(SplitType); + var splitTableAttribute = typeof(T).GetCustomAttribute(); + if (splitTableAttribute != null) + { + return SplitTable((splitTableAttribute as SplitTableAttribute).SplitType); + } + else + { + Check.Exception(true,$" {typeof(T).Name} need SplitTableAttribute"); + return null; + } } #endregion diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs index 1004bb975..ddad11900 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SplitInsertable.cs @@ -18,33 +18,29 @@ namespace SqlSugar public int ExecuteCommand() { CreateTable(); - if (TableNames.Count == 1) + var result = 0; + var groups = TableNames.GroupBy(it => it.Key).ToList(); + var parent = ((InsertableProvider)Inserable); + var names = parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i => i.Key).ToList(); + foreach (var item in groups) { - return Inserable.AS(TableNames.First().Key).ExecuteCommand(); - } - else - { - var result = 0; - var groups = TableNames.GroupBy(it => it.Key).ToList(); - var parent = ((InsertableProvider)Inserable); - var names= parent.InsertBuilder.DbColumnInfoList.GroupBy(it => it.DbColumnName).Select(i=>i.Key).ToList(); - foreach (var item in groups) - { - var groupInserable =(InsertableProvider) this.Context.Insertable(item.ToList()); - groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString; - groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc; - groupInserable.diffModel = parent.diffModel; - groupInserable.IsEnableDiffLogEvent = parent.IsEnableDiffLogEvent; - groupInserable.InsertBuilder.IsNoInsertNull = parent.InsertBuilder.IsNoInsertNull; - groupInserable.IsOffIdentity = parent.IsOffIdentity; - result += groupInserable.AS(item.Key).InsertColumns(names.ToArray()).ExecuteCommand(); - } - return result; + var list = item.Select(it => it.Value as T).ToList(); + var groupInserable = (InsertableProvider)this.Context.Insertable(list); + groupInserable.InsertBuilder.TableWithString = parent.InsertBuilder.TableWithString; + groupInserable.RemoveCacheFunc = parent.RemoveCacheFunc; + groupInserable.diffModel = parent.diffModel; + groupInserable.IsEnableDiffLogEvent = parent.IsEnableDiffLogEvent; + groupInserable.InsertBuilder.IsNoInsertNull = parent.InsertBuilder.IsNoInsertNull; + groupInserable.IsOffIdentity = parent.IsOffIdentity; + result += groupInserable.AS(item.Key).InsertColumns(names.ToArray()).ExecuteCommand(); } + return result; } private void CreateTable() { + var isLog = this.Context.Ado.IsEnableLogEvent; + this.Context.Ado.IsEnableLogEvent = false; foreach (var item in TableNames) { if (!this.Context.DbMaintenance.IsAnyTable(item.Key, false)) @@ -53,6 +49,7 @@ namespace SqlSugar this.Context.CodeFirst.InitTables(); } } + this.Context.Ado.IsEnableLogEvent = isLog; this.Context.MappingTables.Add(EntityInfo.EntityName, EntityInfo.DbTableName); } } diff --git a/Src/Asp.Net/SqlSugar/IntegrationServices/SplitTableService.cs b/Src/Asp.Net/SqlSugar/IntegrationServices/SplitTableService.cs index da907eb5e..4bff51c0d 100644 --- a/Src/Asp.Net/SqlSugar/IntegrationServices/SplitTableService.cs +++ b/Src/Asp.Net/SqlSugar/IntegrationServices/SplitTableService.cs @@ -49,7 +49,7 @@ namespace SqlSugar } public object GetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType, object entityValue) { - var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.PropertyType.GetCustomAttribute() != null); + var splitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute() != null); if (splitColumn == null) { return db.GetDate();