diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs new file mode 100644 index 000000000..bf4ca0f23 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class InsertNavTaskInit where T : class, new() where Root : class, new() + { + + public SqlSugarProvider Context { get; set; } + public InsertNavProvider insertNavProvider { get; set; } + + public InsertNavTask ThenInclude(Expression> expression) where TChild : class, new() + { + this.Context = insertNavProvider._Context; + InsertNavTask result = new InsertNavTask(); + Func> func = () => insertNavProvider.ThenInclude(expression); + result.PreFunc = func; + result.Context = this.Context; + return result; + } + public InsertNavTask ThenInclude(Expression>> expression) where TChild : class, new() + { + this.Context = insertNavProvider._Context; + InsertNavTask result = new InsertNavTask(); + Func> func = () => insertNavProvider.ThenInclude(expression); + result.PreFunc = func; + result.Context = this.Context; + return result; + } + } + public class InsertNavTask where T : class, new() where Root : class, new() + { + public SqlSugarProvider Context { get; set; } + public Func> PreFunc { get; set; } + public InsertNavTask ThenInclude(Expression> expression) where TChild : class, new() + { + InsertNavTask result = new InsertNavTask(); + Func> func = () => PreFunc().ThenInclude(expression); + result.PreFunc = func; + result.Context = this.Context; + return result; + } + public InsertNavTask ThenInclude(Expression>> expression) where TChild : class, new() + { + InsertNavTask result = new InsertNavTask(); + Func> func = () => PreFunc().ThenInclude(expression); + result.PreFunc = func; + result.Context = this.Context; + return result; + } + public void ExecuteCommand() + { + var hasTran = this.Context.Ado.Transaction != null; + if (hasTran) + { + PreFunc(); + } + else + { + this.Context.Ado.UseTran(() => + { + PreFunc(); + }, ex => throw ex); + } + } + public async Task ExecuteCommandAsync() + { + await Task.Run(async () => + { + ExecuteCommand(); + await Task.Delay(0); + }); + } + + public InsertNavTask AsNav() + { + InsertNavTask result = new InsertNavTask(); + Func> func = () => PreFunc().AsNav(); + result.PreFunc = func; + result.Context = this.Context; + return result; + } + } + +} diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index aa9ce39d2..c6c46e5b8 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -890,15 +890,17 @@ namespace SqlSugar #endregion #region Nav CUD - public InsertNavProvider InsertNav(T data) where T : class, new() + public InsertNavTaskInit InsertNav(T data) where T : class, new() { return InsertNav(new List() { data }); } - public InsertNavProvider InsertNav(List datas) where T : class, new() + public InsertNavTaskInit InsertNav(List datas) where T : class, new() { - var result = new InsertNavProvider(); - result._Roots = datas; - result._Context = this; + var result = new InsertNavTaskInit(); + var provider = new InsertNavProvider(); + provider._Roots = datas; + provider._Context = this; + result.insertNavProvider = provider; return result; } public DeleteNavProvider DeleteNav(T data) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs index e2eeb9ca0..bc43beeec 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs @@ -678,11 +678,11 @@ namespace SqlSugar { return ScopedContext.Saveable(saveObject); } - public InsertNavProvider InsertNav(T data) where T : class, new() + public InsertNavTaskInit InsertNav(T data) where T : class, new() { return ScopedContext.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) where T : class, new() + public InsertNavTaskInit InsertNav(List datas) where T : class, new() { return ScopedContext.InsertNav(datas); } diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs index aca0b06c8..a64f8c06b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs @@ -203,8 +203,8 @@ namespace SqlSugar #endregion #region Nav CUD - InsertNavProvider InsertNav(T data) where T : class, new(); - InsertNavProvider InsertNav(List datas) where T : class, new(); + InsertNavTaskInit InsertNav(T data) where T : class, new(); + InsertNavTaskInit InsertNav(List datas) where T : class, new(); DeleteNavProvider DeleteNav(T data); DeleteNavProvider DeleteNav(List datas); UpdateNavProvider UpdateNav(T data); diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs index 310c2f339..f97a8876b 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs @@ -154,11 +154,11 @@ namespace SqlSugar #region Queryable #region Nav CUD - public InsertNavProvider InsertNav(T data) where T : class, new() + public InsertNavTaskInit InsertNav(T data) where T : class, new() { return this.Context.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) where T : class, new() + public InsertNavTaskInit InsertNav(List datas) where T : class, new() { return this.Context.InsertNav(datas); } diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs b/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs index 9db5ecd27..aa0772e81 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs @@ -734,11 +734,11 @@ namespace SqlSugar return ScopedContext.DeleteableWithAttr(deleteObjs); } - public InsertNavProvider InsertNav(T data) where T : class, new() + public InsertNavTaskInit InsertNav(T data) where T : class, new() { return ScopedContext.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) where T : class, new() + public InsertNavTaskInit InsertNav(List datas) where T : class, new() { return ScopedContext.InsertNav(datas); }