From ad8851d19d1b241a3a52747e11190a516ea1a277 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 26 Dec 2022 15:29:13 +0800 Subject: [PATCH] Add : db.DeleteableByObject db.UpdateableByObject --- .../DeleteProvider/DeleteMethodInfo.cs | 23 +++++ .../SugarProvider/SqlSugarProvider.cs | 92 +++++++++++++++++++ .../SugarProvider/SqlSugarScopeProvider.cs | 8 ++ .../UpdateProvider/UpdateMethodInfo.cs | 23 +++++ Src/Asp.Net/SqlSugar/SqlSugar.csproj | 2 + Src/Asp.Net/SqlSugar/SqlSugarClient.cs | 8 ++ Src/Asp.Net/SqlSugar/SqlSugarScope.cs | 9 +- 7 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteMethodInfo.cs create mode 100644 Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteMethodInfo.cs new file mode 100644 index 000000000..8c55124f6 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteMethodInfo.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace SqlSugar +{ + public class DeleteMethodInfo + { + internal SqlSugarProvider Context { get; set; } + internal MethodInfo MethodInfo { get; set; } + internal object objectValue { get; set; } + + public int ExecuteCommand() + { + if (Context == null) return 0; + var inertable=MethodInfo.Invoke(Context, new object[] { objectValue }); + var result= inertable.GetType().GetMethod("ExecuteCommand").Invoke(inertable,new object[] { }); + return (int)result; + } + } +} diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index f8882e7bf..4576c9d7f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -767,6 +767,52 @@ namespace SqlSugar #endregion #region Deleteable + public DeleteMethodInfo DeleteableByObject(object singleEntityObjectOrListObject) + { + if (singleEntityObjectOrListObject == null) + return new DeleteMethodInfo(); + if (singleEntityObjectOrListObject.GetType().FullName.IsCollectionsList()) + { + var list = ((IList)singleEntityObjectOrListObject); + if (list == null || list.Count == 0) + return new DeleteMethodInfo(); + var type = list[0].GetType(); + var newList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(type)); + foreach (var item in list) + { + newList.Add(item); + } + var methods = this.Context.GetType().GetMethods() + .Where(it => it.Name == "Deleteable") + .Where(it => it.GetGenericArguments().Any()) + .Where(it => it.GetParameters().Any(z => z.ParameterType.Name.StartsWith("List"))) + .Where(it => it.Name == "Deleteable").ToList(); + var method = methods.Single().MakeGenericMethod(newList.GetType().GetGenericArguments().FirstOrDefault()); + DeleteMethodInfo result = new DeleteMethodInfo() + { + Context = this.Context, + MethodInfo = method, + objectValue = newList + }; + return result; + } + else + { + var methods = this.Context.GetType().GetMethods() + .Where(it => it.Name == "Deleteable") + .Where(it => it.GetGenericArguments().Any()) + .Where(it => it.GetParameters().Any(z => z.ParameterType.Name == "T")) + .Where(it => it.Name == "Deleteable").ToList(); + var method = methods.Single().MakeGenericMethod(singleEntityObjectOrListObject.GetType()); + DeleteMethodInfo result = new DeleteMethodInfo() + { + Context = this.Context, + MethodInfo = method, + objectValue = singleEntityObjectOrListObject + }; + return result; + } + } public virtual IDeleteable Deleteable() where T : class, new() { InitMappingInfo(); @@ -806,6 +852,52 @@ namespace SqlSugar #endregion #region Updateable + public UpdateMethodInfo UpdateableByObject(object singleEntityObjectOrListObject) + { + if (singleEntityObjectOrListObject == null) + return new UpdateMethodInfo(); + if (singleEntityObjectOrListObject.GetType().FullName.IsCollectionsList()) + { + var list = ((IList)singleEntityObjectOrListObject); + if (list == null || list.Count == 0) + return new UpdateMethodInfo(); + var type = list[0].GetType(); + var newList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(type)); + foreach (var item in list) + { + newList.Add(item); + } + var methods = this.Context.GetType().GetMethods() + .Where(it => it.Name == "Updateable") + .Where(it => it.GetGenericArguments().Any()) + .Where(it => it.GetParameters().Any(z => z.ParameterType.Name.StartsWith("List"))) + .Where(it => it.Name == "Updateable").ToList(); + var method = methods.Single().MakeGenericMethod(newList.GetType().GetGenericArguments().First()); + UpdateMethodInfo result = new UpdateMethodInfo() + { + Context = this.Context, + MethodInfo = method, + objectValue = newList + }; + return result; + } + else + { + var methods = this.Context.GetType().GetMethods() + .Where(it => it.Name == "Updateable") + .Where(it => it.GetGenericArguments().Any()) + .Where(it => it.GetParameters().Any(z => z.ParameterType.Name == "T")) + .Where(it => it.Name == "Updateable").ToList(); + var method = methods.Single().MakeGenericMethod(singleEntityObjectOrListObject.GetType()); + UpdateMethodInfo result = new UpdateMethodInfo() + { + Context = this.Context, + MethodInfo = method, + objectValue = singleEntityObjectOrListObject + }; + return result; + } + } public virtual IUpdateable Updateable(T[] UpdateObjs) where T : class, new() { InitMappingInfo(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs index 08af0e1ca..5f612e8f4 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs @@ -144,6 +144,10 @@ namespace SqlSugar { ScopedContext.Close(); } + public DeleteMethodInfo DeleteableByObject(object singleEntityObjectOrListObject) + { + return ScopedContext.DeleteableByObject(singleEntityObjectOrListObject); + } public IDeleteable Deleteable() where T : class, new() { return ScopedContext.Deleteable(); @@ -615,6 +619,10 @@ namespace SqlSugar { return ScopedContext.UnionAll(queryables); } + public UpdateMethodInfo UpdateableByObject(object singleEntityObjectOrListObject) + { + return ScopedContext.UpdateableByObject(singleEntityObjectOrListObject); + } public IUpdateable Updateable() where T : class, new() { diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs new file mode 100644 index 000000000..74e0f095c --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace SqlSugar +{ + public class UpdateMethodInfo + { + internal SqlSugarProvider Context { get; set; } + internal MethodInfo MethodInfo { get; set; } + internal object objectValue { get; set; } + + public int ExecuteCommand() + { + if (Context == null) return 0; + var inertable=MethodInfo.Invoke(Context, new object[] { objectValue }); + var result= inertable.GetType().GetMethod("ExecuteCommand").Invoke(inertable,new object[] { }); + return (int)result; + } + } +} diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index bae4ee4b4..8c347b1d8 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -133,6 +133,8 @@ + + diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index 3c3e1bf8b..e8cbc14d4 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -665,6 +665,10 @@ namespace SqlSugar #endregion #region Updateable + public UpdateMethodInfo UpdateableByObject(object singleEntityObjectOrListObject) + { + return this.Context.UpdateableByObject(singleEntityObjectOrListObject); + } public IUpdateable Updateable() where T : class, new() { return this.Context.Updateable(); @@ -713,6 +717,10 @@ namespace SqlSugar #endregion #region Deleteable + public DeleteMethodInfo DeleteableByObject(object singleEntityObjectOrListObject) + { + return this.Context.DeleteableByObject(singleEntityObjectOrListObject); + } public IDeleteable Deleteable() where T : class, new() { return this.Context.Deleteable(); diff --git a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs index 7d397bc19..e4ec34a06 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs @@ -120,6 +120,10 @@ namespace SqlSugar { return ScopedContext.CommitTranAsync(); } + public DeleteMethodInfo DeleteableByObject(object singleEntityObjectOrListObject) + { + return ScopedContext.DeleteableByObject(singleEntityObjectOrListObject); + } public IDeleteable Deleteable() where T : class, new() { return ScopedContext.Deleteable(); @@ -626,7 +630,10 @@ namespace SqlSugar { return ScopedContext.UnionAll(queryables); } - + public UpdateMethodInfo UpdateableByObject(object singleEntityObjectOrListObject) + { + return ScopedContext.UpdateableByObject(singleEntityObjectOrListObject); + } public IUpdateable Updateable() where T : class, new() { return ScopedContext.Updateable();