From 338daf398ea10ec4160e5617cbeb1b02d01ae683 Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Sat, 9 Dec 2023 02:07:14 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IUpdate/IDelete=20Wher?=
=?UTF-8?q?eDynamicFilter=20API=EF=BC=9B#1521?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql/FreeSql.xml | 295 ++++++++++++++++++
FreeSql/Interface/Curd/IDelete.cs | 19 +-
FreeSql/Interface/Curd/IUpdate.cs | 18 +-
.../Internal/CommonProvider/DeleteProvider.cs | 15 +-
.../Internal/CommonProvider/UpdateProvider.cs | 11 +-
5 files changed, 344 insertions(+), 14 deletions(-)
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index 0c0bbd01..f6502a75 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -1104,6 +1104,82 @@
+
+
+ 动态创建实体类型
+
+
+
+
+ 配置Class
+
+ 类名
+ 类标记的特性[Table(Name = "xxx")] [Index(xxxx)]
+
+
+
+
+ 配置属性
+
+ 属性名称
+ 属性类型
+ 属性标记的特性-支持多个
+
+
+
+
+ 配置属性
+
+ 属性名称
+ 属性类型
+ 该属性是否重写父类属性
+ 属性标记的特性-支持多个
+
+
+
+
+ 配置属性
+
+ 属性名称
+ 属性类型
+ 该属性是否重写父类属性
+ 属性默认值
+ 属性标记的特性-支持多个
+
+
+
+
+ 配置父类
+
+ 父类类型
+
+
+
+
+ Override属性
+
+
+
+
+
+ Emit动态创建出Class - Type
+
+
+
+
+
+ 首字母小写
+
+
+
+
+
+
+ 首字母大写
+
+
+
+
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
@@ -1598,6 +1674,13 @@
是否标识为NOT
+
+
+ 动态过滤条件
+
+
+
+
禁用全局过滤功能,不传参数时将禁用所有
@@ -3209,6 +3292,13 @@
是否标识为NOT
+
+
+ 动态过滤条件
+
+
+
+
禁用全局过滤功能,不传参数时将禁用所有
@@ -3600,6 +3690,177 @@
+
+
+ 测试数据库是否连接正确,本方法执行如下命令:
+ MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1
+ Oracle: SELECT 1 FROM dual
+
+ 命令超时设置(秒)
+
+ true: 成功, false: 失败
+
+
+
+ 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
+
+
+
+
+
+
+
+
+
+ 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+ 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+ 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+ 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
+
+
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
+
+
+
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
可自定义解析表达式
@@ -4599,6 +4860,12 @@
超时
+
+
+ 获取资源
+
+
+
使用完毕后,归还资源
@@ -4674,6 +4941,12 @@
资源对象
+
+
+ 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
+
+ 资源对象
+
归还对象给对象池的时候触发
@@ -5604,6 +5877,28 @@
请使用 fsql.InsertDict(dict) 方法插入字典数据
+
+
+ 动态构建Class Type
+
+
+
+
+
+ 根据字典,创建 table 对应的实体对象
+
+
+
+
+
+
+
+ 根据实体对象,创建 table 对应的字典
+
+
+
+
+
C#: that >= between && that <= and
diff --git a/FreeSql/Interface/Curd/IDelete.cs b/FreeSql/Interface/Curd/IDelete.cs
index 95d6c19b..2a7f4304 100644
--- a/FreeSql/Interface/Curd/IDelete.cs
+++ b/FreeSql/Interface/Curd/IDelete.cs
@@ -4,6 +4,7 @@ using System.Data.Common;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
+using FreeSql.Internal.Model;
namespace FreeSql
{
@@ -80,13 +81,19 @@ namespace FreeSql
/// 是否标识为NOT
///
IDelete WhereDynamic(object dywhere, bool not = false);
+ ///
+ /// 动态过滤条件
+ ///
+ ///
+ ///
+ IDelete WhereDynamicFilter(DynamicFilterInfo filter);
- ///
- /// 禁用全局过滤功能,不传参数时将禁用所有
- ///
- /// 零个或多个过滤器名字
- ///
- IDelete DisableGlobalFilter(params string[] name);
+ ///
+ /// 禁用全局过滤功能,不传参数时将禁用所有
+ ///
+ /// 零个或多个过滤器名字
+ ///
+ IDelete DisableGlobalFilter(params string[] name);
///
/// 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
diff --git a/FreeSql/Interface/Curd/IUpdate.cs b/FreeSql/Interface/Curd/IUpdate.cs
index 5810bd4c..1224f769 100644
--- a/FreeSql/Interface/Curd/IUpdate.cs
+++ b/FreeSql/Interface/Curd/IUpdate.cs
@@ -238,13 +238,19 @@ namespace FreeSql
/// 是否标识为NOT
///
IUpdate WhereDynamic(object dywhere, bool not = false);
+ ///
+ /// 动态过滤条件
+ ///
+ ///
+ ///
+ IUpdate WhereDynamicFilter(DynamicFilterInfo filter);
- ///
- /// 禁用全局过滤功能,不传参数时将禁用所有
- ///
- /// 零个或多个过滤器名字
- ///
- IUpdate DisableGlobalFilter(params string[] name);
+ ///
+ /// 禁用全局过滤功能,不传参数时将禁用所有
+ ///
+ /// 零个或多个过滤器名字
+ ///
+ IUpdate DisableGlobalFilter(params string[] name);
///
/// 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs
index 30588fad..bb22abf1 100644
--- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs
+++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs
@@ -120,8 +120,21 @@ namespace FreeSql.Internal.CommonProvider
public IDelete WhereDynamic(object dywhere, bool not = false) => not == false ?
this.Where(_commonUtils.WhereObject(_table, "", dywhere)) :
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
+ public IDelete WhereDynamicFilter(DynamicFilterInfo filter)
+ {
+ var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8);
+ var tempQuery = _orm.Select