diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs index f0fcc4e88..03430b01d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs @@ -11,6 +11,7 @@ namespace SqlSugar { public List Roots { get; set; } + public SqlSugarProvider Context { get; internal set; } public DeleteNavProvider ThenInclude(Expression> expression) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs index 73f6382b0..efeb31fb1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProvider.cs @@ -7,16 +7,78 @@ using System.Threading.Tasks; namespace SqlSugar { - public class InsertNavProvider + public class InsertNavProvider where T : class,new() where Root:class,new() { public List Roots { get; set; } + public object ParentList { get; set; } + public EntityInfo ParentEntity { get; set; } + public SqlSugarProvider Context { get; set; } - public InsertNavProvider ThenInclude(Expression> expression) + public InsertNavProvider ThenInclude(Expression> expression) where TChild : class, new() { + if (ParentList == null) + { + ParentList = GetParentList(Roots); + } + var name=ExpressionTool.GetMemberName(expression); + var nav = this.ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name); + if (nav.Navigat == null) + { + Check.ExceptionEasy($"{name} no navigate attribute", $"{this.ParentEntity.EntityName}的属性{name}没有导航属性"); + } + if (nav.Navigat.NavigatType == NavigateType.OneToOne || nav.Navigat.NavigatType == NavigateType.ManyToOne) + { + InsertOneToOne(); + } + else if (nav.Navigat.NavigatType == NavigateType.OneToMany) + { + InsertOneToMany(); + } + else + { + InsertManyToMany(); + } return null; } + private void InsertManyToMany() + { + + } + + private void InsertOneToMany() + { + + } + + private void InsertOneToOne() + { + + } + + private List GetParentList(List datas) where Type : class ,new() + { + List result = new List(); + this.Context.InitMappingInfo(); + var entity = this.Context.EntityMaintenance.GetEntityInfo(); + var isIdentity = entity.Columns.Where(it=>it.IsIdentity).Any(); + if (isIdentity) + { + foreach (var item in datas) + { + this.Context.Insertable(datas).ExecuteCommandIdentityIntoEntity(); + } + } + else + { + this.Context.Insertable(datas).ExecuteCommand(); + } + this.ParentEntity = entity; + result = datas; + return result; + } + public InsertNavProvider AsNav() { return null; diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs index 3e04ed68b..3f7b1ac33 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs @@ -11,6 +11,7 @@ namespace SqlSugar { public List Roots { get; set; } + public SqlSugarProvider Context { get; internal set; } public UpdateNavProvider ThenInclude(Expression> expression) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index 9d180b514..52add15bc 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -890,14 +890,15 @@ namespace SqlSugar #endregion #region Nav CUD - public InsertNavProvider InsertNav(T data) + public InsertNavProvider InsertNav(T data) where T : class, new() { return InsertNav(new List() { data }); } - public InsertNavProvider InsertNav(List datas) + public InsertNavProvider InsertNav(List datas) where T : class, new() { var result = new InsertNavProvider(); result.Roots = datas; + result.Context = this; return result; } public DeleteNavProvider DeleteNav(T data) @@ -908,6 +909,7 @@ namespace SqlSugar { var result = new DeleteNavProvider(); result.Roots = datas; + result.Context = this; return result; } public UpdateNavProvider UpdateNav(T data) @@ -918,6 +920,7 @@ namespace SqlSugar { var result = new UpdateNavProvider(); result.Roots = datas; + result.Context = this; return result; } #endregion diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs index 328665b2a..e2eeb9ca0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs @@ -678,11 +678,11 @@ namespace SqlSugar { return ScopedContext.Saveable(saveObject); } - public InsertNavProvider InsertNav(T data) + public InsertNavProvider InsertNav(T data) where T : class, new() { return ScopedContext.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) + public InsertNavProvider InsertNav(List datas) where T : class, new() { return ScopedContext.InsertNav(datas); } diff --git a/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs b/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs index 0d330cd52..aca0b06c8 100644 --- a/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs @@ -203,8 +203,8 @@ namespace SqlSugar #endregion #region Nav CUD - InsertNavProvider InsertNav(T data); - InsertNavProvider InsertNav(List datas); + InsertNavProvider InsertNav(T data) where T : class, new(); + InsertNavProvider InsertNav(List datas) where T : class, new(); DeleteNavProvider DeleteNav(T data); DeleteNavProvider DeleteNav(List datas); UpdateNavProvider UpdateNav(T data); diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index 91efaf8ae..500906f9d 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -154,11 +154,11 @@ namespace SqlSugar #region Queryable #region Nav CUD - public InsertNavProvider InsertNav(T data) + public InsertNavProvider InsertNav(T data) where T : class, new() { return this.Context.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) + public InsertNavProvider InsertNav(List datas) where T : class, new() { return this.Context.InsertNav(datas); } diff --git a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs index 4aa1ea61c..330b4e5de 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs @@ -730,11 +730,11 @@ namespace SqlSugar return ScopedContext.DeleteableWithAttr(deleteObjs); } - public InsertNavProvider InsertNav(T data) + public InsertNavProvider InsertNav(T data) where T : class, new() { return ScopedContext.InsertNav(data); } - public InsertNavProvider InsertNav(List datas) + public InsertNavProvider InsertNav(List datas) where T : class, new() { return ScopedContext.InsertNav(datas); }