mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-17 19:43:21 +08:00
- 完善 AsTreeCte + ToUpdate/ToDelete 实现树所有子节点删除或更新;
This commit is contained in:
parent
255cbf33aa
commit
18cabd22b9
@ -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)
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -1904,7 +1904,7 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToTreeList();
|
||||
//Assert.Single(t3);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Single(t3[0].Childs);
|
||||
@ -1913,18 +1913,34 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(4, t3.Count);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Equal("110000", t3[1].Code);
|
||||
//Assert.Equal("110100", t3[2].Code);
|
||||
//Assert.Equal("110101", t3[3].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(3, t3.Count);
|
||||
//Assert.Equal("110000", t3[0].Code);
|
||||
//Assert.Equal("110100", t3[1].Code);
|
||||
//Assert.Equal("110101", t3[2].Code);
|
||||
|
||||
//var select = fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte()
|
||||
// //.OrderBy("a.cte_level desc") //递归层级
|
||||
// ;
|
||||
//// var list = select.ToList(); //自己调试看查到的数据
|
||||
//select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
//Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
//Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
//Assert.False(fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1938,6 +1954,8 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -10,6 +10,7 @@ public class g
|
||||
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
|
||||
//.UseConnectionFactory(FreeSql.DataType.MySql, () => new MySql.Data.MySqlClient.MySqlConnection("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;"))
|
||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=192.168.164.10;Port=33061;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
|
||||
.UseAutoSyncStructure(true)
|
||||
//.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseMonitorCommand(
|
||||
|
@ -1808,6 +1808,22 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1821,6 +1837,8 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1764,6 +1764,22 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1777,6 +1793,8 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1915,7 +1915,7 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToTreeList();
|
||||
//Assert.Single(t3);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Single(t3[0].Childs);
|
||||
@ -1924,18 +1924,34 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(4, t3.Count);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Equal("110000", t3[1].Code);
|
||||
//Assert.Equal("110100", t3[2].Code);
|
||||
//Assert.Equal("110101", t3[3].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(3, t3.Count);
|
||||
//Assert.Equal("110000", t3[0].Code);
|
||||
//Assert.Equal("110100", t3[1].Code);
|
||||
//Assert.Equal("110101", t3[2].Code);
|
||||
|
||||
//var select = fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte()
|
||||
// //.OrderBy("a.cte_level desc") //递归层级
|
||||
// ;
|
||||
//// var list = select.ToList(); //自己调试看查到的数据
|
||||
//select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
//Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
//Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
//Assert.False(fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1949,6 +1965,8 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1800,6 +1800,22 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1813,6 +1829,8 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1859,6 +1859,22 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1872,6 +1888,8 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1750,6 +1750,22 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1763,6 +1779,8 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -9,6 +9,7 @@ public class g
|
||||
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
||||
.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2")
|
||||
//.UseConnectionFactory(FreeSql.DataType.OdbcMySql, () => new System.Data.Odbc.OdbcConnection("Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;"))
|
||||
//.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=192.168.164.10;port=33061;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2")
|
||||
.UseAutoSyncStructure(true)
|
||||
.UseMonitorCommand(
|
||||
cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
|
||||
|
@ -1809,6 +1809,22 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1822,6 +1838,8 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1968,7 +1968,7 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToTreeList();
|
||||
//Assert.Single(t3);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Single(t3[0].Childs);
|
||||
@ -1977,18 +1977,34 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
|
||||
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(4, t3.Count);
|
||||
//Assert.Equal("100000", t3[0].Code);
|
||||
//Assert.Equal("110000", t3[1].Code);
|
||||
//Assert.Equal("110100", t3[2].Code);
|
||||
//Assert.Equal("110101", t3[3].Code);
|
||||
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
|
||||
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsTreeCte().OrderBy(a => a.Code).ToList();
|
||||
//Assert.Equal(3, t3.Count);
|
||||
//Assert.Equal("110000", t3[0].Code);
|
||||
//Assert.Equal("110100", t3[1].Code);
|
||||
//Assert.Equal("110101", t3[2].Code);
|
||||
|
||||
//var select = fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte()
|
||||
// //.OrderBy("a.cte_level desc") //递归层级
|
||||
// ;
|
||||
//// var list = select.ToList(); //自己调试看查到的数据
|
||||
//select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
//Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
//Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
//Assert.False(fsql.Select<VM_District_Child>()
|
||||
// .Where(a => a.Name == "中国")
|
||||
// .AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -2002,6 +2018,8 @@ WHERE ((b.`IsFinished` OR a.`TaskType` = 3) AND b.`EnabledMark` = 1)", groupsql1
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1800,6 +1800,22 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1813,6 +1829,8 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1875,6 +1875,22 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1888,6 +1904,8 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1842,6 +1842,8 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1843,6 +1843,22 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
@ -1856,6 +1872,8 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
|
||||
|
||||
[Column(StringLength = 6)]
|
||||
public virtual string ParentCode { get; set; }
|
||||
|
||||
public int testint { get; set; }
|
||||
}
|
||||
[Table(Name = "D_District", DisableSyncStructure = true)]
|
||||
public class VM_District_Child : BaseDistrict
|
||||
|
@ -1960,6 +1960,22 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
|
||||
Assert.Equal("中国[100000] -> 北京[110000]", t4[1].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 北京市[110100]", t4[2].path);
|
||||
Assert.Equal("中国[100000] -> 北京[110000] -> 东城区[110101]", t4[3].path);
|
||||
|
||||
var select = fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte()
|
||||
//.OrderBy("a.cte_level desc") //递归层级
|
||||
;
|
||||
// var list = select.ToList(); //自己调试看查到的数据
|
||||
select.ToUpdate().Set(a => a.testint, 855).ExecuteAffrows();
|
||||
Assert.Equal(855, fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Distinct().First(a => a.testint));
|
||||
|
||||
Assert.Equal(4, select.ToDelete().ExecuteAffrows());
|
||||
Assert.False(fsql.Select<VM_District_Child>()
|
||||
.Where(a => a.Name == "中国")
|
||||
.AsTreeCte().Any());
|
||||
}
|
||||
|
||||
[Table(Name = "D_District")]
|
||||
|
@ -11,6 +11,7 @@ public class g
|
||||
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
|
||||
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=5")
|
||||
//.UseConnectionFactory(FreeSql.DataType.MySql, () => new MySql.Data.MySqlClient.MySqlConnection("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;"))
|
||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=192.168.164.10;Port=33061;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
|
||||
.UseAutoSyncStructure(true)
|
||||
//.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseMonitorCommand(
|
||||
|
@ -13,17 +13,18 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
public abstract partial class DeleteProvider<T1> : IDelete<T1> where T1 : class
|
||||
{
|
||||
protected IFreeSql _orm;
|
||||
protected CommonUtils _commonUtils;
|
||||
protected CommonExpression _commonExpression;
|
||||
protected TableInfo _table;
|
||||
protected Func<string, string> _tableRule;
|
||||
protected StringBuilder _where = new StringBuilder();
|
||||
protected int _whereTimes = 0;
|
||||
protected List<GlobalFilter.Item> _whereGlobalFilter;
|
||||
protected List<DbParameter> _params = new List<DbParameter>();
|
||||
protected DbTransaction _transaction;
|
||||
protected DbConnection _connection;
|
||||
public IFreeSql _orm;
|
||||
public CommonUtils _commonUtils;
|
||||
public CommonExpression _commonExpression;
|
||||
public TableInfo _table;
|
||||
public Func<string, string> _tableRule;
|
||||
public StringBuilder _where = new StringBuilder();
|
||||
public int _whereTimes = 0;
|
||||
public List<GlobalFilter.Item> _whereGlobalFilter;
|
||||
public List<DbParameter> _params = new List<DbParameter>();
|
||||
public DbTransaction _transaction;
|
||||
public DbConnection _connection;
|
||||
public Action<StringBuilder> _interceptSql;
|
||||
|
||||
public DeleteProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere)
|
||||
{
|
||||
@ -155,6 +156,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (string.IsNullOrEmpty(globalFilterCondi) == false)
|
||||
sb.Append(" AND ").Append(globalFilterCondi);
|
||||
}
|
||||
_interceptSql?.Invoke(sb);
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
@ -928,43 +928,96 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string GetToDeleteWhere(string alias)
|
||||
{
|
||||
var pks = _tables[0].Table.Primarys;
|
||||
if (pks.Length == 1)
|
||||
return $"{_commonUtils.QuoteSqlName(_tables[0].Table.Primarys[0].Attribute.Name)} in (select * from ({this.ToSql($"{_tables[0].Alias}.{_commonUtils.QuoteSqlName(_tables[0].Table.Primarys[0].Attribute.Name)}")}) {alias})";
|
||||
else
|
||||
var old_selectVal = _select;
|
||||
switch (_orm.Ado.DataType)
|
||||
{
|
||||
var concatTypes = new Type[pks.Length * 2 - 1];
|
||||
var concatMainCols = new string[pks.Length * 2 - 1];
|
||||
var concatInCols = new string[pks.Length * 2 - 1];
|
||||
var concatSplit = _commonUtils.FormatSql("{0}", $",{alias},");
|
||||
for (var a = 0; a < pks.Length; a++)
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
break;
|
||||
default:
|
||||
_select = "SELECT ";
|
||||
break;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (pks.Length == 1)
|
||||
return $"{_commonUtils.QuoteSqlName(_tables[0].Table.Primarys[0].Attribute.Name)} in (select * from ({this.ToSql($"{_tables[0].Alias}.{_commonUtils.QuoteSqlName(_tables[0].Table.Primarys[0].Attribute.Name)}")}) {alias})";
|
||||
else
|
||||
{
|
||||
concatTypes[a * 2] = pks[a].CsType;
|
||||
concatMainCols[a * 2] = _commonUtils.QuoteSqlName(pks[a].Attribute.Name);
|
||||
concatInCols[a * 2] = $"{_tables[0].Alias}.{_commonUtils.QuoteSqlName(pks[a].Attribute.Name)}";
|
||||
if (a < pks.Length - 1)
|
||||
var concatTypes = new Type[pks.Length * 2 - 1];
|
||||
var concatMainCols = new string[pks.Length * 2 - 1];
|
||||
var concatInCols = new string[pks.Length * 2 - 1];
|
||||
var concatSplit = _commonUtils.FormatSql("{0}", $",{alias},");
|
||||
for (var a = 0; a < pks.Length; a++)
|
||||
{
|
||||
concatTypes[a * 2 + 1] = typeof(string);
|
||||
concatMainCols[a * 2 + 1] = concatSplit;
|
||||
concatInCols[a * 2 + 1] = concatSplit;
|
||||
concatTypes[a * 2] = pks[a].CsType;
|
||||
concatMainCols[a * 2] = _commonUtils.QuoteSqlName(pks[a].Attribute.Name);
|
||||
concatInCols[a * 2] = $"{_tables[0].Alias}.{_commonUtils.QuoteSqlName(pks[a].Attribute.Name)}";
|
||||
if (a < pks.Length - 1)
|
||||
{
|
||||
concatTypes[a * 2 + 1] = typeof(string);
|
||||
concatMainCols[a * 2 + 1] = concatSplit;
|
||||
concatInCols[a * 2 + 1] = concatSplit;
|
||||
}
|
||||
}
|
||||
return $"{_commonUtils.StringConcat(concatMainCols, concatTypes)} in (select * from ({this.ToSql($"{_commonUtils.StringConcat(concatInCols, concatTypes)} as as1")}) {alias})";
|
||||
}
|
||||
return $"{_commonUtils.StringConcat(concatMainCols, concatTypes)} in (select * from ({this.ToSql($"{_commonUtils.StringConcat(concatInCols, concatTypes)} as as1")}) {alias})";
|
||||
}
|
||||
finally
|
||||
{
|
||||
_select = old_selectVal;
|
||||
}
|
||||
}
|
||||
public IDelete<T1> ToDelete()
|
||||
{
|
||||
if (_tables[0].Table.Primarys.Any() == false) throw new Exception($"ToDelete 功能要求实体类 {_tables[0].Table.CsName} 必须有主键");
|
||||
var del = _orm.Delete<T1>();
|
||||
var del = _orm.Delete<T1>() as DeleteProvider<T1>;
|
||||
if (_tables[0].Table.Type != typeof(T1)) del.AsType(_tables[0].Table.Type);
|
||||
if (_params.Any()) del.GetType().GetField("_params", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(del, new List<DbParameter>(_params.ToArray()));
|
||||
switch (_orm.Ado.DataType)
|
||||
{
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
break;
|
||||
default:
|
||||
var beforeSql = this._select;
|
||||
if (beforeSql.EndsWith("SELECT ", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
beforeSql = beforeSql.Substring(0, beforeSql.Length - 7);
|
||||
if (string.IsNullOrEmpty(beforeSql) == false)
|
||||
del._interceptSql = sb => sb.Insert(0, beforeSql);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return del.Where(GetToDeleteWhere("ftb_del"));
|
||||
}
|
||||
public IUpdate<T1> ToUpdate()
|
||||
{
|
||||
if (_tables[0].Table.Primarys.Any() == false) throw new Exception($"ToUpdate 功能要求实体类 {_tables[0].Table.CsName} 必须有主键");
|
||||
var upd = _orm.Update<T1>();
|
||||
var upd = _orm.Update<T1>() as UpdateProvider<T1>;
|
||||
if (_tables[0].Table.Type != typeof(T1)) upd.AsType(_tables[0].Table.Type);
|
||||
if (_params.Any()) upd.GetType().GetField("_params", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(upd, new List<DbParameter>(_params.ToArray()));
|
||||
switch (_orm.Ado.DataType)
|
||||
{
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
break;
|
||||
default:
|
||||
var beforeSql = this._select;
|
||||
if (beforeSql.EndsWith("SELECT ", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
beforeSql = beforeSql.Substring(0, beforeSql.Length - 7);
|
||||
if (string.IsNullOrEmpty(beforeSql) == false)
|
||||
upd._interceptSql = sb => sb.Insert(0, beforeSql);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return upd.Where(GetToDeleteWhere("ftb_upd"));
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public Action<BatchProgressStatus<T1>> _batchProgress;
|
||||
public DbTransaction _transaction;
|
||||
public DbConnection _connection;
|
||||
public Action<StringBuilder> _interceptSql;
|
||||
|
||||
public UpdateProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere)
|
||||
{
|
||||
@ -766,6 +767,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
sb.Append(" AND ").Append(versionCondi);
|
||||
}
|
||||
|
||||
_interceptSql?.Invoke(sb);
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user