Merge main branches

This commit is contained in:
igeekfan
2022-05-20 03:16:13 +08:00
121 changed files with 1110 additions and 709 deletions

View File

@ -328,7 +328,8 @@ namespace FreeSql
}
break;
case Internal.Model.TableRefType.OneToMany:
var addlist = isAdd ? new List<object>() : null;
var addList = new List<object>();
var addOrUpdateList = new List<object>();
foreach (var propValItem in propValEach)
{
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
@ -336,10 +337,20 @@ namespace FreeSql
var val = FreeSql.Internal.Utils.GetDataReaderValue(tref.RefColumns[colidx].CsType, _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName));
_db.OrmOriginal.SetEntityValueWithPropertyName(tref.RefEntityType, propValItem, tref.RefColumns[colidx].CsName, val);
}
if (isAdd) addlist.Add(propValItem);
else await refSet.AddOrUpdateAsync(propValItem, cancellationToken);
if (isAdd) addList.Add(propValItem);
else
{
var flagExists = refSet.ExistsInStates(propValItem);
if (flagExists == null) addList.Add(propValItem); //自增/Guid
else addOrUpdateList.Add(propValItem); //统一状态管理
}
}
if (addList.Any()) await refSet.AddRangeAsync(addList, cancellationToken);
if (addOrUpdateList.Any())
{
var existsList = await refSet.Select.WhereDynamic(addOrUpdateList).ToListAsync(false, cancellationToken);
foreach (var aouItem in addOrUpdateList) await refSet.AddOrUpdateAsync(aouItem, cancellationToken);
}
if (isAdd) await refSet.AddRangeAsync(addlist, cancellationToken);
break;
}
};

View File

@ -339,7 +339,8 @@ namespace FreeSql
}
break;
case Internal.Model.TableRefType.OneToMany:
var addlist = isAdd ? new List<object>() : null;
var addList = new List<object>();
var addOrUpdateList = new List<object>();
foreach (var propValItem in propValEach)
{
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
@ -347,10 +348,20 @@ namespace FreeSql
var val = FreeSql.Internal.Utils.GetDataReaderValue(tref.RefColumns[colidx].CsType, _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName));
_db.OrmOriginal.SetEntityValueWithPropertyName(tref.RefEntityType, propValItem, tref.RefColumns[colidx].CsName, val);
}
if (isAdd) addlist.Add(propValItem);
else refSet.AddOrUpdate(propValItem);
if (isAdd) addList.Add(propValItem);
else
{
var flagExists = refSet.ExistsInStates(propValItem);
if (flagExists == null) addList.Add(propValItem); //自增/Guid
else addOrUpdateList.Add(propValItem); //统一状态管理
}
}
if (addList.Any()) refSet.AddRange(addList);
if (addOrUpdateList.Any())
{
var existsList = refSet.Select.WhereDynamic(addOrUpdateList).ToList();
foreach (var aouItem in addOrUpdateList) refSet.AddOrUpdate(aouItem);
}
if (isAdd) refSet.AddRange(addlist);
break;
}
};

View File

@ -581,7 +581,7 @@
<param name="entity">实体对象</param>
<param name="propertyName">属性名</param>
</member>
<member name="M:FreeSql.IBaseRepository`1.RemoveCascadeByDatabase(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<member name="M:FreeSql.IBaseRepository`1.DeleteCascadeByDatabase(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据设置的 OneToOne/OneToMany/ManyToMany 导航属性,级联查询所有的数据库记录,删除并返回它们
</summary>

View File

@ -94,7 +94,7 @@ namespace FreeSql
_dbset.RemoveRange(entitys);
return _db.SaveChanges();
}
public List<object> RemoveCascadeByDatabase(Expression<Func<TEntity, bool>> predicate)
public List<object> DeleteCascadeByDatabase(Expression<Func<TEntity, bool>> predicate)
{
var list = _dbset.RemoveCascadeByDatabase(predicate);
var affrows = _db.SaveChanges();

View File

@ -32,7 +32,7 @@ namespace FreeSql
_dbset.RemoveRange(entitys);
return _db.SaveChangesAsync(cancellationToken);
}
async public virtual Task<List<object>> RemoveCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
async public virtual Task<List<object>> DeleteCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
{
var list = await _dbset.RemoveCascadeByDatabaseAsync(predicate, cancellationToken);
var affrows = await _db.SaveChangesAsync(cancellationToken);

View File

@ -90,7 +90,7 @@ namespace FreeSql
/// </summary>
/// <param name="predicate"></param>
/// <returns></returns>
List<object> RemoveCascadeByDatabase(Expression<Func<TEntity, bool>> predicate);
List<object> DeleteCascadeByDatabase(Expression<Func<TEntity, bool>> predicate);
/// <summary>
/// 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行<para></para>
@ -122,7 +122,7 @@ namespace FreeSql
Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default);
Task<int> DeleteAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
Task<List<object>> RemoveCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
Task<List<object>> DeleteCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
#endif
}