- 完善 AsTreeCte + ToUpdate/ToDelete 实现树所有子节点删除或更新;

This commit is contained in:
28810
2020-08-04 20:54:15 +08:00
parent 255cbf33aa
commit 18cabd22b9
24 changed files with 346 additions and 63 deletions

View File

@ -567,11 +567,13 @@ namespace FreeSql
/// 该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句<para></para>
/// 注意:* 本方法只支持单表操作,不支持导航属性级联保存
/// </summary>
/// <param name="data">可选参数:手工传递最终的 data 值进行对比<para></para>默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比</param>
/// <returns></returns>
public int EndEdit()
public int EndEdit(List<TEntity> data = null)
{
if (data == null) data = _dataEditing;
var beforeAffrows = 0;
if (_dataEditing == null) return 0;
if (data == null) return 0;
var oldEnable = _db.Options.EnableAddOrUpdateNavigateList;
_db.Options.EnableAddOrUpdateNavigateList = false;
try
@ -579,7 +581,7 @@ namespace FreeSql
DbContextFlushCommand();
var addList = new List<TEntity>();
var ediList = new List<NativeTuple<TEntity, string>>();
foreach (var item in _dataEditing)
foreach (var item in data)
{
var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
if (_statesEditing.TryRemove(key, out var state) == false)

View File

@ -125,13 +125,6 @@
清空状态数据
</summary>
</member>
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据 lambda 条件删除数据
</summary>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DbSet`1.Add(`0)">
<summary>
添加
@ -183,12 +176,13 @@
</summary>
<param name="data"></param>
</member>
<member name="M:FreeSql.DbSet`1.EndEdit">
<member name="M:FreeSql.DbSet`1.EndEdit(System.Collections.Generic.List{`0})">
<summary>
完成编辑数据,进行保存动作<para></para>
该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句<para></para>
注意:* 本方法只支持单表操作,不支持导航属性级联保存
</summary>
<param name="data">可选参数:手工传递最终的 data 值进行对比<para></para>默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比</param>
<returns></returns>
</member>
<member name="M:FreeSql.Extensions.EfCoreFluentApi.EfCoreColumnFluent.Help">
@ -330,12 +324,13 @@
</summary>
<param name="data"></param>
</member>
<member name="M:FreeSql.IBaseRepository`1.EndEdit">
<member name="M:FreeSql.IBaseRepository`1.EndEdit(System.Collections.Generic.List{`0})">
<summary>
完成编辑数据,进行保存动作<para></para>
该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句<para></para>
注意:* 本方法只支持单表操作,不支持导航属性级联保存
</summary>
<param name="data">可选参数:手工传递最终的 data 值进行对比<para></para>默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比</param>
<returns></returns>
</member>
<member name="T:FreeSql.IUnitOfWork">
@ -520,14 +515,5 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@ -142,7 +142,7 @@ namespace FreeSql
}
public void BeginEdit(List<TEntity> data) => _dbset.BeginEdit(data);
public int EndEdit()
public int EndEdit(List<TEntity> data = null)
{
_db.FlushCommand();
if (UnitOfWork?.GetOrBeginTransaction(true) == null && _db.OrmOriginal.Ado.TransactionCurrentThread == null)
@ -152,7 +152,7 @@ namespace FreeSql
UnitOfWork = new UnitOfWork(_db.OrmOriginal);
try
{
affrows = _dbset.EndEdit();
affrows = _dbset.EndEdit(data);
UnitOfWork.Commit();
}
catch
@ -167,7 +167,7 @@ namespace FreeSql
}
return affrows;
}
return _dbset.EndEdit();
return _dbset.EndEdit(data);
}
}

View File

@ -92,8 +92,9 @@ namespace FreeSql
/// 该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句<para></para>
/// 注意:* 本方法只支持单表操作,不支持导航属性级联保存
/// </summary>
/// <param name="data">可选参数:手工传递最终的 data 值进行对比<para></para>默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比</param>
/// <returns></returns>
int EndEdit();
int EndEdit(List<TEntity> data = null);
#if net40
#else