mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-05 17:37:58 +08:00
Update Nav Insert
This commit is contained in:
parent
578bdd070b
commit
85733a79a4
@ -19,6 +19,8 @@ namespace SqlSugar
|
||||
public NavigateType? _NavigateType { get; set; }
|
||||
public bool IsFirst { get; set; }
|
||||
public InsertNavOptions _navOptions { get; set; }
|
||||
public bool IsNav { get; internal set; }
|
||||
internal NavContext NavContext { get; set; }
|
||||
|
||||
public InsertNavProvider<Root, Root> AsNav()
|
||||
{
|
||||
@ -56,10 +58,12 @@ namespace SqlSugar
|
||||
private InsertNavProvider<Root, TChild> _ThenInclude<TChild>(Expression<Func<T, TChild>> expression) where TChild : class, new()
|
||||
{
|
||||
var name = ExpressionTool.GetMemberName(expression);
|
||||
var isRoot = false;
|
||||
if (this._ParentEntity == null)
|
||||
{
|
||||
this._ParentEntity = this._Context.EntityMaintenance.GetEntityInfo<Root>();
|
||||
this.IsFirst = true;
|
||||
isRoot = true;
|
||||
}
|
||||
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
||||
if (nav.Navigat == null)
|
||||
@ -82,20 +86,21 @@ namespace SqlSugar
|
||||
InitParentList();
|
||||
InsertManyToMany<TChild>(name, nav);
|
||||
}
|
||||
AddContextInfo(name,isRoot);
|
||||
return GetResult<TChild>();
|
||||
}
|
||||
|
||||
private InsertNavProvider<Root, TChild> _ThenInclude<TChild>(Expression<Func<T, List<TChild>>> expression) where TChild : class, new()
|
||||
{
|
||||
var name = ExpressionTool.GetMemberName(expression);
|
||||
var isRoot = false;
|
||||
if (this._ParentEntity == null)
|
||||
{
|
||||
this._ParentEntity = this._Context.EntityMaintenance.GetEntityInfo<Root>();
|
||||
IsFirst = true;
|
||||
isRoot = true;
|
||||
}
|
||||
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
||||
;
|
||||
|
||||
if (nav.Navigat == null)
|
||||
{
|
||||
Check.ExceptionEasy($"{name} no navigate attribute", $"{this._ParentEntity.EntityName}的属性{name}没有导航属性");
|
||||
@ -116,7 +121,25 @@ namespace SqlSugar
|
||||
InitParentList();
|
||||
InsertManyToMany<TChild>(name, nav);
|
||||
}
|
||||
AddContextInfo(name,isRoot);
|
||||
return GetResult<TChild>();
|
||||
}
|
||||
|
||||
private void AddContextInfo(string name,bool isRoot)
|
||||
{
|
||||
if (IsNav || isRoot)
|
||||
{
|
||||
if (this.NavContext != null && this.NavContext.Items != null)
|
||||
{
|
||||
this.NavContext.Items.Add(new NavContextItem() { Level = 0, RootName = name });
|
||||
}
|
||||
}
|
||||
}
|
||||
private bool NotAny(string name)
|
||||
{
|
||||
if (IsFirst) return true;
|
||||
if (this.NavContext == null) return true;
|
||||
return this.NavContext?.Items?.Any(it => it.RootName == name) == false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,14 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
Check.ExceptionEasy(thisPkColumn == null, $"{thisEntity.EntityName}need primary key", $"实体{thisEntity.EntityName}需要主键");
|
||||
InsertDatas(children, thisPkColumn);
|
||||
if (NotAny(name))
|
||||
{
|
||||
InsertDatas(children, thisPkColumn);
|
||||
}
|
||||
else
|
||||
{
|
||||
this._ParentList = children.Cast<object>().ToList();
|
||||
}
|
||||
SetNewParent<TChild>(thisEntity, thisPkColumn);
|
||||
}
|
||||
|
||||
|
@ -12,42 +12,51 @@ namespace SqlSugar
|
||||
|
||||
internal SqlSugarProvider Context { get; set; }
|
||||
internal InsertNavProvider<Root, Root> insertNavProvider { get; set; }
|
||||
internal NavContext NavContext { get; set; }
|
||||
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, TChild>> expression) where TChild : class, new()
|
||||
{
|
||||
this.Context = insertNavProvider._Context;
|
||||
insertNavProvider.NavContext = this.NavContext;
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => insertNavProvider.ThenInclude(expression);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, List<TChild>>> expression) where TChild : class, new()
|
||||
{
|
||||
this.Context = insertNavProvider._Context;
|
||||
insertNavProvider.NavContext = this.NavContext;
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => insertNavProvider.ThenInclude(expression);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, TChild>> expression,InsertNavOptions options) where TChild : class, new()
|
||||
{
|
||||
this.Context = insertNavProvider._Context;
|
||||
insertNavProvider.NavContext = this.NavContext;
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => insertNavProvider.ThenInclude(expression, options);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, List<TChild>>> expression, InsertNavOptions options) where TChild : class, new()
|
||||
{
|
||||
this.Context = insertNavProvider._Context;
|
||||
insertNavProvider.NavContext =this.NavContext;
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => insertNavProvider.ThenInclude(expression, options);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -55,20 +64,33 @@ namespace SqlSugar
|
||||
{
|
||||
public SqlSugarProvider Context { get; set; }
|
||||
public Func<InsertNavProvider<Root, T>> PreFunc { get; set; }
|
||||
internal NavContext NavContext { get; set; }
|
||||
|
||||
public InsertNavTask<Root, TChild> ThenInclude<TChild>(Expression<Func<T, TChild>> expression) where TChild : class, new()
|
||||
{
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => PreFunc().ThenInclude(expression);
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => {
|
||||
var nav = PreFunc().ThenInclude(expression);
|
||||
nav.NavContext = this.NavContext;
|
||||
return nav;
|
||||
};
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> ThenInclude<TChild>(Expression<Func<T, List<TChild>>> expression) where TChild : class, new()
|
||||
{
|
||||
InsertNavTask<Root, TChild> result = new InsertNavTask<Root, TChild>();
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => PreFunc().ThenInclude(expression);
|
||||
Func<InsertNavProvider<Root, TChild>> func = () =>
|
||||
{
|
||||
var nav = PreFunc().ThenInclude(expression);
|
||||
nav.NavContext = this.NavContext;
|
||||
return nav;
|
||||
};
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, TChild>> expression) where TChild : class, new()
|
||||
@ -88,6 +110,7 @@ namespace SqlSugar
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => PreFunc().ThenInclude(expression,options);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> ThenInclude<TChild>(Expression<Func<T, List<TChild>>> expression, InsertNavOptions options) where TChild : class, new()
|
||||
@ -96,6 +119,7 @@ namespace SqlSugar
|
||||
Func<InsertNavProvider<Root, TChild>> func = () => PreFunc().ThenInclude(expression, options);
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
public InsertNavTask<Root, TChild> Include<TChild>(Expression<Func<Root, TChild>> expression, InsertNavOptions options) where TChild : class, new()
|
||||
@ -164,9 +188,16 @@ namespace SqlSugar
|
||||
private InsertNavTask<Root, Root> AsNav()
|
||||
{
|
||||
InsertNavTask<Root, Root> result = new InsertNavTask<Root, Root>();
|
||||
Func<InsertNavProvider<Root, Root>> func = () => PreFunc().AsNav();
|
||||
Func<InsertNavProvider<Root, Root>> func = () => {
|
||||
|
||||
var navas= PreFunc().AsNav();
|
||||
navas.NavContext = this.NavContext;
|
||||
navas.IsNav = true;
|
||||
return navas;
|
||||
};
|
||||
result.PreFunc = func;
|
||||
result.Context = this.Context;
|
||||
result.NavContext = this.NavContext;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
internal class NavContext
|
||||
{
|
||||
public List<NavContextItem> Items { get; set; }
|
||||
}
|
||||
internal class NavContextItem
|
||||
{
|
||||
public int Level { get; set; }
|
||||
public string RootName { get; set; }
|
||||
}
|
||||
}
|
@ -1111,6 +1111,7 @@ namespace SqlSugar
|
||||
provider._Roots = datas;
|
||||
provider._Context = this;
|
||||
result.insertNavProvider = provider;
|
||||
result.NavContext = new NavContext() { Items = new List<NavContextItem>() };
|
||||
return result;
|
||||
}
|
||||
public InsertNavTaskInit<T, T> InsertNav<T>(T data, InsertNavRootOptions rootOptions) where T : class, new()
|
||||
@ -1125,6 +1126,7 @@ namespace SqlSugar
|
||||
provider._Context = this;
|
||||
provider._RootOptions = rootOptions;
|
||||
result.insertNavProvider = provider;
|
||||
result.NavContext = new NavContext() { Items = new List<NavContextItem>() };
|
||||
return result;
|
||||
}
|
||||
public DeleteNavTaskInit<T, T> DeleteNav<T>(T data) where T : class, new()
|
||||
|
@ -90,6 +90,7 @@
|
||||
<Compile Include="Abstract\DeleteProvider\SplitTableDeleteProvider.cs" />
|
||||
<Compile Include="Abstract\EntityMaintenance\EntityColumnExtension.cs" />
|
||||
<Compile Include="Abstract\EntityMaintenance\EntityMaintenance.cs" />
|
||||
<Compile Include="Abstract\ExecuteNavProvider\NavContext.cs" />
|
||||
<Compile Include="Abstract\ExecuteNavProvider\UpdateNavOneToOne.cs" />
|
||||
<Compile Include="Abstract\ExecuteNavProvider\UpdateNavManyToMany.cs" />
|
||||
<Compile Include="Abstract\ExecuteNavProvider\UpdateNavOneToMany.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user