From c8b966e0258293c9f75d60ade5a68e0694f3de9f Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Fri, 17 Dec 2021 02:47:53 +0800 Subject: [PATCH] db.Fastest Support BulkCopy --- .../FastestProvider/FastestProvider.cs | 2 +- .../Abstract/FastestProvider/Setting.cs | 6 ++ .../Abstract/FastestProvider/SplitFastest.cs | 57 +++++++++++++++++++ Src/Asp.Net/SqlSugar/Interface/IFastest.cs | 4 +- Src/Asp.Net/SqlSugar/SqlSugar.csproj | 1 + 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index a2edd1935..e99014234 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -8,7 +8,7 @@ namespace SqlSugar { public partial class FastestProvider:IFastest where T:class,new() { - private SqlSugarProvider context; + internal SqlSugarProvider context; private ISugarQueryable queryable; private EntityInfo entityInfo { get; set; } public bool isLog; diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs index 73fde0872..aa4da1b10 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Setting.cs @@ -21,5 +21,11 @@ namespace SqlSugar this.Size = size; return this; } + public SplitFastest SplitTable() + { + SplitFastest result = new SplitFastest(); + result.FastestProvider = this; + return result; + } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs new file mode 100644 index 000000000..41041bfef --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class SplitFastestwhere T:class,new() + { + public FastestProvider FastestProvider { get; set; } + + public int BulkCopy(List datas) + { + List groupModels; + int result; + GroupDataList(datas, out groupModels, out result); + foreach (var item in groupModels.GroupBy(it => it.GroupName)) + { + var addList = item.Select(it => it.Item).ToList(); + result += FastestProvider.BulkCopy(addList); ; + } + return result; + } + public async Task BulkCopyAsync(List datas) + { + List groupModels; + int result; + GroupDataList(datas, out groupModels, out result); + foreach (var item in groupModels.GroupBy(it => it.GroupName)) + { + var addList = item.Select(it => it.Item).ToList(); + result +=await FastestProvider.BulkCopyAsync(addList); ; + } + return result; + } + + private void GroupDataList(List datas, out List groupModels, out int result) + { + groupModels = new List(); + var db = FastestProvider.context; + foreach (var item in datas) + { + var tableName = db.SplitHelper().GetTableName(item); + groupModels.Add(new GroupModel() { GroupName = tableName, Item = item }); + } + result = 0; + } + + public class GroupModel + { + public string GroupName { get; set; } + public T Item { get; set; } + } + } + +} diff --git a/Src/Asp.Net/SqlSugar/Interface/IFastest.cs b/Src/Asp.Net/SqlSugar/Interface/IFastest.cs index fc91ed6d1..9d8fb37a6 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IFastest.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IFastest.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; namespace SqlSugar { - public interface IFastest + public interface IFastest where T:class,new() { IFastest AS(string tableName); IFastest PageSize(int Size); @@ -16,5 +16,7 @@ namespace SqlSugar Task BulkUpdateAsync(List datas); int BulkUpdate(List datas, string[] whereColumns, string[] updateColumns); Task BulkUpdateAsync(List datas, string[] whereColumns, string[] updateColumns); + + SplitFastest SplitTable(); } } diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index e1b7544e8..e239bc4f5 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -92,6 +92,7 @@ +