Update inset Nav

This commit is contained in:
sunkaixuan 2022-07-04 06:41:10 +08:00
parent 3d5c41987e
commit 355891eb45
2 changed files with 59 additions and 23 deletions

View File

@ -67,7 +67,7 @@ namespace SqlSugar
var pkColumn = entity.Columns.FirstOrDefault(it => it.IsPrimarykey == true); var pkColumn = entity.Columns.FirstOrDefault(it => it.IsPrimarykey == true);
if (nav.Navigat.Name2.HasValue()) if (nav.Navigat.Name2.HasValue())
{ {
pkColumn = _ParentEntity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2); pkColumn = entity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2);
} }
return pkColumn; return pkColumn;
} }
@ -76,42 +76,64 @@ namespace SqlSugar
var fkColumn = entity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name); var fkColumn = entity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name);
return fkColumn; return fkColumn;
} }
private void InsertDatas<TChild>(List<TChild> children, EntityColumnInfo pkColumn) where TChild : class, new() private void InsertDatas<TChild>(List<TChild> children, EntityColumnInfo pkColumn, EntityColumnInfo NavColumn=null) where TChild : class, new()
{ {
children = children.Distinct().ToList(); children = children.Distinct().ToList();
var x = this._Context.Storageable(children).WhereColumns(new string[] { pkColumn.PropertyName }).ToStorage(); var x = this._Context.Storageable(children).WhereColumns(new string[] { pkColumn.PropertyName }).ToStorage();
var insertData = children = x.InsertList.Select(it => it.Item).ToList(); var insertData = children = x.InsertList.Select(it => it.Item).ToList();
if (pkColumn.IsIdentity||pkColumn.OracleSequenceName.HasValue()) Check.ExceptionEasy(pkColumn==null&&NavColumn==null,$"The entity is invalid",$"实体错误无法使用导航");
InitData(pkColumn, insertData);
this._Context.Insertable(insertData).ExecuteCommand();
this._ParentList = children.Cast<object>().ToList();
}
private void InitData<TChild>(EntityColumnInfo pkColumn, List<TChild> insertData) where TChild : class, new()
{
if (pkColumn.IsIdentity || pkColumn.OracleSequenceName.HasValue())
{ {
InsertIdentity(insertData); InsertIdentity(insertData);
} }
else if (pkColumn.UnderType==UtilConstants.LongType&&pkColumn.IsIdentity==false) else if (pkColumn.UnderType == UtilConstants.LongType)
{ {
foreach (var child in insertData) SetValue(pkColumn, insertData, SnowFlakeSingle.Instance.NextId());
{
if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child)))
{
pkColumn.PropertyInfo.SetValue(child, SnowFlakeSingle.Instance.NextId());
}
}
this._Context.Insertable(insertData).ExecuteCommand();
} }
else if (pkColumn.UnderType == UtilConstants.GuidType && pkColumn.IsIdentity == false) else if (pkColumn.UnderType == UtilConstants.GuidType)
{ {
foreach (var child in insertData) SetValue(pkColumn, insertData, Guid.NewGuid());
{ }
if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child))) else if (pkColumn.UnderType == UtilConstants.StringType)
{ {
pkColumn.PropertyInfo.SetValue(child, Guid.NewGuid()); SetValue(pkColumn, insertData, Guid.NewGuid().ToString());
} }
} else if (pkColumn.UnderType == UtilConstants.IntType)
this._Context.Insertable(insertData).ExecuteCommand(); {
SetError(pkColumn, insertData);
} }
else else
{ {
this._Context.Insertable(insertData).ExecuteCommand();
}
}
private void SetValue<TChild>(EntityColumnInfo pkColumn, List<TChild> insertData,object value) where TChild : class, new()
{
foreach (var child in insertData)
{
if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child)))
{
pkColumn.PropertyInfo.SetValue(child, value);
}
}
}
private void SetError<TChild>(EntityColumnInfo pkColumn, List<TChild> insertData) where TChild : class, new()
{
foreach (var child in insertData)
{
if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child)))
{
Check.ExceptionEasy($"The field {pkColumn. DbColumnName} is not an autoassignment type and requires an assignment", $"字段{pkColumn.DbColumnName}不是可自动赋值类型,需要赋值");
}
} }
this._ParentList = children.Cast<object>().ToList();
} }
} }
} }

View File

@ -19,6 +19,11 @@ namespace SqlSugar
var thisPkColumn = GetPkColumnByNav(thisEntity, nav); var thisPkColumn = GetPkColumnByNav(thisEntity, nav);
var thisFkColumn= GetFKColumnByNav(thisEntity, nav); var thisFkColumn= GetFKColumnByNav(thisEntity, nav);
EntityColumnInfo parentPkColumn = GetParentPkColumn(); EntityColumnInfo parentPkColumn = GetParentPkColumn();
EntityColumnInfo parentNavColumn = GetParentPkNavColumn(nav);
if (parentNavColumn != null)
{
parentPkColumn = parentNavColumn;
}
foreach (var item in parentList) foreach (var item in parentList)
{ {
var parentValue = parentPkColumn.PropertyInfo.GetValue(item); var parentValue = parentPkColumn.PropertyInfo.GetValue(item);
@ -45,6 +50,15 @@ namespace SqlSugar
} }
return parentPkColumn; return parentPkColumn;
} }
private EntityColumnInfo GetParentPkNavColumn(EntityColumnInfo nav)
{
EntityColumnInfo result = null;
if (nav.Navigat.Name2.HasValue())
{
result = _ParentPkColumn = this._ParentEntity.Columns.FirstOrDefault(it => it.PropertyName== nav.Navigat.Name2);
}
return result;
}
private void SetNewParent<TChild>(EntityInfo entityInfo,EntityColumnInfo entityColumnInfo) where TChild : class, new() private void SetNewParent<TChild>(EntityInfo entityInfo,EntityColumnInfo entityColumnInfo) where TChild : class, new()
{ {