From 4fc20086c136636a877f291e3637123f2a4ca22a Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Fri, 3 Mar 2023 19:27:43 +0800
Subject: [PATCH] v3.2.691-preview20230305
---
Directory.Build.props | 2 +-
.../FreeSql.Extensions.AggregateRoot.csproj | 2 +-
.../FreeSql.Extensions.BaseEntity.csproj | 2 +-
.../FreeSql.Extensions.JsonMap.csproj | 2 +-
.../FreeSql.Extensions.LazyLoading.csproj | 2 +-
.../FreeSql.Extensions.Linq.csproj | 2 +-
.../FreeSql.Generator.csproj | 2 +-
FreeSql.All/FreeSql.All.csproj | 2 +-
FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +-
FreeSql.Repository/FreeSql.Repository.csproj | 2 +-
FreeSql/FreeSql.csproj | 2 +-
FreeSql/FreeSql.xml | 12085 ++++++++--------
.../FreeSql.Provider.ClickHouse.csproj | 2 +-
.../FreeSql.Provider.Custom.csproj | 2 +-
.../FreeSql.Provider.Dameng.csproj | 2 +-
.../FreeSql.Provider.Firebird.csproj | 2 +-
.../FreeSql.Provider.GBase.csproj | 2 +-
.../FreeSql.Provider.KingbaseES.csproj | 2 +-
.../FreeSql.Provider.MsAccess.csproj | 2 +-
.../FreeSql.Provider.MySql.csproj | 2 +-
.../FreeSql.Provider.MySqlConnector.csproj | 2 +-
.../FreeSql.Provider.Odbc.csproj | 2 +-
.../FreeSql.Provider.Oracle.csproj | 2 +-
.../FreeSql.Provider.OracleOledb.csproj | 2 +-
.../FreeSql.Provider.PostgreSQL.csproj | 2 +-
.../FreeSql.Provider.QuestDb.csproj | 2 +-
.../FreeSql.Provider.ShenTong.csproj | 2 +-
.../FreeSql.Provider.SqlServer.csproj | 2 +-
...FreeSql.Provider.SqlServerForSystem.csproj | 2 +-
.../FreeSql.Provider.Sqlite.csproj | 2 +-
.../FreeSql.Provider.SqliteCore.csproj | 2 +-
31 files changed, 6064 insertions(+), 6081 deletions(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index 5449bdf7..0e767cb6 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -11,7 +11,7 @@
diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj
index 90faadca..901ac49f 100644
--- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj
+++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj
index cfbbc4fd..b6c39a34 100644
--- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj
+++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj
@@ -19,7 +19,7 @@
key.snk
false
latest
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj
index fdd75c26..740ea3b0 100644
--- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj
+++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj
index 22d3a95a..ad72d76d 100644
--- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj
+++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj
@@ -15,7 +15,7 @@
$(AssemblyName)
true
true
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj
index 2f52ec7e..812af376 100644
--- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj
+++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj
index a0551c90..06915e6d 100644
--- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj
+++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj
@@ -13,7 +13,7 @@
https://github.com/2881099/FreeSql
https://github.com/2881099/FreeSql
FreeSql DbFirst 实体生成器
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj
index 751e5fc1..bed57b3b 100644
--- a/FreeSql.All/FreeSql.All.csproj
+++ b/FreeSql.All/FreeSql.All.csproj
@@ -17,7 +17,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj
index 8f6fdc38..b52240ce 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.csproj
+++ b/FreeSql.DbContext/FreeSql.DbContext.csproj
@@ -17,7 +17,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj
index 2642aef6..b90751b2 100644
--- a/FreeSql.Repository/FreeSql.Repository.csproj
+++ b/FreeSql.Repository/FreeSql.Repository.csproj
@@ -17,7 +17,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj
index dfe54547..f73656c3 100644
--- a/FreeSql/FreeSql.csproj
+++ b/FreeSql/FreeSql.csproj
@@ -17,7 +17,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index 48207741..b3501e4a 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -1,6051 +1,6034 @@
-
-
-
- FreeSql
-
-
-
-
- 数据库列名
-
-
-
-
- 指定数据库旧的列名,修改实体属性命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库字段;否则将视为【新增字段】
-
-
-
-
- 数据库类型,如: varchar(255)
- 字符串长度,可使用特性 [MaxLength(255)]
-
-
-
-
- 主键
-
-
-
-
- 自增标识
-
-
-
-
- 是否可DBNull
-
-
-
-
- 忽略此列,不迁移、不插入
-
-
-
-
- 设置行锁(乐观锁)版本号,每次更新累加版本号,若更新整个实体时会附带当前的版本号判断(修改失败时抛出异常)
-
-
-
-
- 类型映射,除了可做基本的类型映射外,特别介绍的功能:
- 1、将 enum 属性映射成 typeof(string)
- 2、将 对象 属性映射成 typeof(string),请安装扩展包 FreeSql.Extensions.JsonMap
-
-
-
-
- 创建表时字段的位置(场景:实体继承后设置字段顺序),规则如下:
-
- >0时排前面,1,2,3...
-
- =0时排中间(默认)
-
- <0时排后面,...-3,-2,-1
-
-
-
-
- 该字段是否可以插入,默认值true,指定为false插入时该字段会被忽略
-
-
-
-
- 该字段是否可以更新,默认值true,指定为false更新时该字段会被忽略
-
-
-
-
- 标记属性为数据库服务器时间(utc/local),在插入的时候使用类似 getdate() 执行
-
-
-
-
- 设置长度,针对 string/byte[] 类型避免 DbType 的繁琐设置
- 提示:也可以使用 [MaxLength(100)]
- ---
- StringLength = 100 时,对应 DbType:
- MySql -> varchar(100)
- SqlServer -> nvarchar(100)
- PostgreSQL -> varchar(100)
- Oracle -> nvarchar2(100)
- Sqlite -> nvarchar(100)
- ---
- StringLength < 0 时,对应 DbType:
- MySql -> text (StringLength = -2 时,对应 longtext)
- SqlServer -> nvarchar(max)
- PostgreSQL -> text
- Oracle -> nclob
- Sqlite -> text
- v1.6.0+ byte[] 支持设置 StringLength
-
-
-
-
- 执行 Insert 方法时使用此值
- 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
-
-
-
-
- decimal/numeric 类型的长度
-
-
-
-
- decimal/numeric 类型的小数位长度
-
-
-
-
- 重写功能
- 比如:[Column(RewriteSql = "geography::STGeomFromText({0},4236)")]
- 插入:INSERT INTO [table]([geo]) VALUES(geography::STGeomFromText('...',4236))
- 提示:更新也生效
-
-
-
-
- 重读功能
- 比如:[Column(RereadSql = "{0}.STAsText()")]
- 查询:SELECT a.[id], a.[geo].STAsText() FROM [table] a
-
-
-
-
- 数据库列名
-
-
-
-
- 指定数据库旧的列名,修改实体属性命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库字段;否则将视为【新增字段】
-
-
-
-
- 数据库类型,如: varchar(255)
-
-
-
-
- 主键
-
-
-
-
- 自增标识
-
-
-
-
- 是否可DBNull
-
-
-
-
- 忽略此列,不迁移、不插入
-
-
-
-
- 乐观锁
-
-
-
-
- 类型映射,比如:可将 enum 属性映射成 typeof(string)
-
-
-
-
-
-
- 创建表时字段位置,规则如下:
-
- >0时排前面
-
- =0时排中间(默认)
-
- <0时排后面
-
-
-
-
-
-
- 该字段是否可以插入,默认值true,指定为false插入时该字段会被忽略
-
-
-
-
-
-
- 该字段是否可以更新,默认值true,指定为false更新时该字段会被忽略
-
-
-
-
-
-
- 标记属性为数据库服务器时间(utc/local),在插入的时候使用类似 getdate() 执行
-
-
-
-
-
-
- 设置长度,针对 string 类型避免 DbType 的繁琐设置
- ---
- StringLength = 100 时,对应 DbType:
- MySql -> varchar(100)
- SqlServer -> nvarchar(100)
- PostgreSQL -> varchar(100)
- Oracle -> nvarchar2(100)
- Sqlite -> nvarchar(100)
- ---
- StringLength = -1 时,对应 DbType:
- MySql -> text
- SqlServer -> nvarchar(max)
- PostgreSQL -> text
- Oracle -> nvarchar2(4000)
- Sqlite -> text
-
-
-
-
- 执行 Insert 方法时使用此值
- 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
-
-
-
-
-
-
- decimal/numeric 类型的长度/小数位长度
-
- 总长度
- 小数位长度
-
-
-
-
- 重写功能
- 比如:[Column(RewriteSql = "geography::STGeomFromText({0},4236)")]
- 插入:INSERT INTO [table]([geo]) VALUES(geography::STGeomFromText('...',4236))
- 提示:更新也生效
-
-
-
-
-
-
- 重读功能
- 比如:[Column(RereadSql = "{0}.STAsText()")]
- 查询:SELECT a.[id], a.[geo].STAsText() FROM [table] a
-
-
-
-
-
-
- 自定义表达式函数解析
- 注意:请使用静态方法、或者在类上标记
-
-
-
-
- 自定义表达式函数解析的时候,指定参数不解析 SQL,而是直接传进来
-
-
-
-
- 数据库类型,可用于适配多种数据库环境
-
-
-
-
- 已解析的表达式中参数内容
-
-
-
-
- 表达式原始值
-
-
-
-
- 主对象的参数化对象,可重塑其属性
-
-
-
-
- 可附加参数化对象
- 注意:本属性只有 Where 的表达式解析才可用
-
-
-
-
- 将 c# 对象转换为 SQL
-
-
-
-
- 返回表达式函数表示的 SQL 字符串
-
-
-
-
- 获取实体元数据
-
-
-
-
-
-
- 解析表达式
-
-
-
-
-
-
- (非公开)内部公共工具类方法
-
-
-
-
- 索引设置,如:[Index("{tablename}_idx_01", "name")]
-
-
-
-
- 索引设置,如:[Index("{tablename}_idx_01", "name")]
-
- 索引名v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
- 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
-
-
-
- 索引设置,如:[Index("{tablename}_idx_01", "name", true)]
-
- 索引名v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
- 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
- 是否唯一
-
-
-
- 索引名
- v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
-
-
-
-
- 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
-
-
-
-
- 是否唯一
-
-
-
-
- OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
- ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
- _________________public Category Category { get; set; }
- OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
- _________________public List<Topic> Topics { get; set; }
-
-
-
-
- OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
- ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
- _________________public Category Category { get; set; }
- OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
- _________________public List<Topic> Topics { get; set; }
-
-
-
-
- 与非主键进行关联,仅支持 OneToMany、ManyToOne
- 使用方法参考 Bind 属性
-
-
-
-
- 手工绑定 ManyToMany 导航关系
-
-
-
-
- OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
- ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
- _________________public Category Category { get; set; }
- OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
- _________________public List<Topic> Topics { get; set; }
-
-
-
-
- 主键名
-
-
-
-
- 数据库表名
-
-
-
-
- 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
-
-
-
-
- 禁用 CodeFirst 同步结构迁移
-
-
-
-
- 格式:属性名=开始时间(递增)
- 按年分表:[Table(Name = "log_{yyyy}", AsTable = "create_time=2022-1-1(1 year)")]
- 按月分表:[Table(Name = "log_{yyyyMM}", AsTable = "create_time=2022-5-1(1 month)")]
- 按日分表:[Table(Name = "log_{yyyyMMdd}", AsTable = "create_time=2022-5-1(5 day)")]
- 按时分表:[Table(Name = "log_{yyyyMMddHH}", AsTable = "create_time=2022-5-1(6 hour)")]
-
-
-
-
- 可以匹配以下条件(支持参数化):
- `field` BETWEEN '2022-01-01 00:00:00' AND '2022-03-01 00:00:00'
- `field` > '2022-01-01 00:00:00' AND `field` < '2022-03-01 00:00:00'
- `field` > '2022-01-01 00:00:00' AND `field` <= '2022-03-01 00:00:00'
- `field` >= '2022-01-01 00:00:00' AND `field` < '2022-03-01 00:00:00'
- `field` >= '2022-01-01 00:00:00' AND `field` <= '2022-03-01 00:00:00'
- `field` > '2022-01-01 00:00:00'
- `field` >= '2022-01-01 00:00:00'
- `field` < '2022-01-01 00:00:00'
- `field` <= '2022-01-01 00:00:00'
-
-
-
-
-
-
- 数据库表名
-
-
-
-
- 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
-
-
-
-
- 禁用 CodeFirst 同步结构迁移
-
-
-
-
- 导航关系Fluent,与 NavigateAttribute 对应
-
-
-
- 多对多关系的中间实体类型
-
-
-
-
- 设置实体的索引
-
- 索引名
- 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
- 是否唯一
-
-
-
-
- 数据库表名
-
-
-
-
- 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
-
-
-
-
- 禁用 CodeFirst 同步结构迁移
-
-
-
-
- 导航关系Fluent,与 NavigateAttribute 对应
-
-
-
-
- 多对多关系的中间实体类型
-
-
-
-
- 设置实体的索引
-
- 索引名
- 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
- 是否唯一
-
-
-
-
- 所属表
-
-
-
-
- 列名
-
-
-
-
- 映射到 C# 类型
-
-
-
-
- 数据库枚举类型int值
-
-
-
-
- 数据库类型,字符串,varchar
-
-
-
-
- 数据库类型,字符串,varchar(255)
-
-
-
-
- 最大长度
-
-
-
-
- 主键
-
-
-
-
- 自增标识
-
-
-
-
- 是否可DBNull
-
-
-
-
- 备注,早期编码时少按了一个字母,请使用 Comment
-
-
-
-
- 备注
-
-
-
-
- 数据库默认值
-
-
-
-
- 字段位置
-
-
-
-
- 枚举类型标识
-
-
-
-
- 枚举项
-
-
-
-
- 唯一标识
-
-
-
-
- SqlServer下是Owner、PostgreSQL下是Schema、MySql下是数据库名
-
-
-
-
- 表名
-
-
-
-
- 表备注,SqlServer下是扩展属性 MS_Description
-
-
-
-
- 表/视图
-
-
-
-
- 列
-
-
-
-
- 自增列
-
-
-
-
- 主键/组合
-
-
-
-
- 唯一键/组合
-
-
-
-
- 索引/组合
-
-
-
-
- 外键
-
-
-
-
- 类型标识
-
-
-
-
- 枚举项
-
-
-
-
- 通用的 Odbc 实现,只能做基本的 Crud 操作
- 不支持实体结构迁移、不支持分页(只能 Take 查询)
-
- 通用实现为了让用户自己适配更多的数据库,比如连接 mssql 2000、db2 等数据库
- 默认适配 SqlServer,可以继承后重新适配 FreeSql.Odbc.Default.OdbcAdapter,最好去看下代码
-
- 适配新的 OdbcAdapter,请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetOdbcAdapter 方法设置
-
-
-
-
- 武汉达梦数据库有限公司,基于 Odbc 的实现
-
-
-
-
- Microsoft Office Access 是由微软发布的关联式数据库管理系统
-
-
-
-
- 武汉达梦数据库有限公司,基于 DmProvider.dll 的实现
-
-
-
-
- 北京人大金仓信息技术股份有限公司,基于 Odbc 的实现
-
-
-
-
- 天津神舟通用数据技术有限公司,基于 System.Data.OscarClient.dll 的实现
-
-
-
-
- 北京人大金仓信息技术股份有限公司,基于 Kdbndp.dll 的实现
-
-
-
-
- Firebird 是一个跨平台的关系数据库,能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现
-
-
-
-
- 自定义适配器,访问任何数据库
- 注意:该类型不提供 DbFirst/CodeFirst 功能
-
-
-
-
- 天津南大通用数据技术股份有限公司成立于2004年,是国产数据库、大数据领域的知名企业,基于 Odbc 的实现
-
-
-
-
- 获取 IDbConnection 对应的 IFreeSql 实例
-
-
-
-
-
-
- 插入数据
-
-
-
-
-
-
- 插入数据,传入实体
-
-
-
-
-
-
-
-
- 插入数据,传入实体数组
-
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
-
- 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
- MySql 5.6+: on duplicate key update
- PostgreSQL 9.4+: on conflict do update
- SqlServer 2008+: merge into
- Oracle 11+: merge into
- Sqlite: replace into
- Firebird: merge into
- 达梦: merge into
- 人大金仓:on conflict do update
- 神通:merge into
- MsAccess:不支持
- 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
-
-
-
-
-
-
-
- 修改数据
-
-
-
-
-
-
-
- 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 查询数据
-
-
-
-
-
-
-
- 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 删除数据
-
-
-
-
-
-
-
- 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
-
- 插入数据
-
-
-
-
-
-
- 插入数据,传入实体
-
-
-
-
-
-
-
-
- 插入数据,传入实体数组
-
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
-
- 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
- MySql 5.6+: on duplicate key update
- PostgreSQL 9.4+: on conflict do update
- SqlServer 2008+: merge into
- Oracle 11+: merge into
- Sqlite: replace into
- 达梦: merge into
- 人大金仓:on conflict do update
- 神通:merge into
- MsAccess:不支持
- 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
-
-
-
-
-
-
-
- 修改数据
-
-
-
-
-
-
-
- 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 查询数据
-
-
-
-
-
-
-
- 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 删除数据
-
-
-
-
-
-
-
- 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
-
-
-
-
- 当Guid无值时,会生成有序的新值
-
-
-
-
-
- 获取实体的主键值,多个主键返回数组
-
-
-
-
-
-
-
-
- 获取实体的属性值
-
-
-
-
-
-
-
-
-
- 获取实体的所有数据,以 (1, 2, xxx) 的形式
-
-
-
-
-
-
-
-
- 使用新实体的值,复盖旧实体的值
-
-
-
-
- 使用新实体的主键值,复盖旧实体的主键值
-
-
-
-
- 设置实体中主键内的自增字段值(若存在)
-
-
-
-
-
-
-
-
- 获取实体中主键内的自增字段值(若存在)
-
-
-
-
-
-
-
- 清除实体的主键值,将自增、Guid类型的主键值清除
-
-
-
-
-
-
-
- 清除实体的主键值,将自增、Guid类型的主键值清除
-
-
-
-
-
-
-
- 对比两个实体值,返回相同/或不相同的列名
-
-
-
-
-
-
-
-
-
-
- 设置实体中某属性的数值增加指定的值
-
-
-
-
-
-
-
-
-
- 设置实体中某属性的值
-
-
-
-
-
-
-
-
-
- 缓存执行 IUpdate.Set
-
-
-
-
-
-
-
-
- SqlExt 是利用自定表达式函数解析功能,解析默认常用的SQL函数,欢迎 PR
-
-
-
-
- rank() over(order by ...)
-
-
-
-
-
- dense_rank() over(order by ...)
-
-
-
-
-
- count() over(order by ...)
-
-
-
-
-
- sum(..) over(order by ...)
-
-
-
-
-
-
- avg(..) over(order by ...)
-
-
-
-
-
- max(..) over(order by ...)
-
-
-
-
-
-
-
- min(..) over(order by ...)
-
-
-
-
-
-
-
- SqlServer row_number() over(order by ...)
-
-
-
-
-
- isnull、ifnull、coalesce、nvl
-
-
-
-
-
-
-
-
- count(distinct name)
-
-
-
-
-
-
-
- 注意:使用者自己承担【注入风险】
-
-
-
-
-
-
- 大于 >
-
-
-
-
-
- 大于或等于 >=
-
-
-
-
-
- 小于 <
-
-
-
-
-
- 小于或等于 <=
-
-
-
-
-
- case when .. then .. end
-
-
-
-
-
- case when .. then .. end
-
-
-
-
-
-
-
-
-
- MySql group_concat(distinct .. order by .. separator ..)
-
-
-
-
-
-
- MySql find_in_set(str, strlist)
-
-
-
-
-
-
-
-
- PostgreSQL string_agg(.., ..)
-
-
-
-
-
-
-
- 使用连接串(推荐)
-
- 数据库类型
- 数据库连接串
- 提供者的类型,一般不需要指定,如果一直提示“缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载”的错误,说明反射获取不到类型,此时该参数可排上用场例如:typeof(FreeSql.SqlServer.SqlServerProvider<>)
-
-
-
-
- 使用从数据库,支持多个
-
- 从数据库连接串
-
-
-
-
- 使用自定义数据库连接对象(放弃内置对象连接池技术)
-
- 数据库类型
- 数据库连接对象创建器
- 提供者的类型,一般不需要指定,如果一直提示“缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载”的错误,说明反射获取不到类型,此时该参数可排上用场例如:typeof(FreeSql.SqlServer.SqlServerProvider<>)
-
-
-
-
- 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
- 注意:生产环境中谨慎使用
-
- true:运行时检查自动同步结构, false:不同步结构(默认)
-
-
-
-
- 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
- 本功能会影响 IFreeSql 首次访问的速度。
- 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
-
-
-
-
-
-
- 不使用命令参数化执行,针对 Insert/Update,也可临时使用 IInsert/IUpdate.NoneParameter()
-
-
-
-
-
-
- 是否生成命令参数化执行,针对 lambda 表达式解析
- 注意:常量不会参数化,变量才会做参数化
- var id = 100;
- fsql.Select<T>().Where(a => a.id == id) 会参数化
- fsql.Select<T>().Where(a => a.id == 100) 不会参数化
-
-
-
-
-
-
- 延时加载导航属性对象,导航属性需要声明 virtual
-
-
-
-
-
-
- 监视数据库命令对象
-
- 执行前
- 执行后,可监视执行性能
-
-
-
-
- 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)
- 优先级小于 [Column(Name = "xxx")]
-
-
-
-
-
-
- SQL名称是否使用 [] `` ""
- true: SELECT .. FROM [table]
- false: SELECT .. FROM table
-
-
-
-
-
-
- 指定映射优先级
- 例如表名:实体类名 < Aop < FluentApi < Attribute < AsTable
- 事件 Aop -------> fsql.Aop.ConfigEntity/fsql.Aop.ConfigEntityProperty
- 方法 FluentApi -> fsql.CodeFirst.ConfigEntity/fsql.CodeFirst.Entity
- 特性 Attribute -> [Table(Name = xxx, ...)]
- -----------------------------------------------------------------------------
- 默认规则:关于映射优先级,Attribute 可以更直观排查问题,即使任何地方使用 FluentApi/Aop 设置 TableName 都不生效。
- 调整规则:UseMappingPriority(Attribute, FluentApi, Aop)
- 实体类名 < Attribute < FluentApi < Aop < AsTable
-
-
-
-
-
-
-
-
-
- 监听 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自动释放连接池
- 默认值: true
-
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 命令超时设置(秒)
-
-
-
-
-
-
- lambda表达式条件,仅支持实体基础成员(不包含导航对象)
- 若想使用导航对象,请使用 ISelect.ToDelete() 方法
-
- lambda表达式条件
-
-
-
-
- lambda表达式条件,仅支持实体基础成员(不包含导航对象)
- 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
-
- true 时生效
- lambda表达式条件
-
-
-
-
- 原生sql语法条件,Where("id = @id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 原生sql语法条件,Where("id = @id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- true 时生效
- sql语法条件
- 参数
-
-
-
-
- 传入实体,将主键作为条件
-
- 实体
-
-
-
-
- 传入实体集合,将主键作为条件
-
- 实体集合
-
-
-
-
- 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
- 是否标识为NOT
-
-
-
-
- 禁用全局过滤功能,不传参数时将禁用所有
-
- 零个或多个过滤器名字
-
-
-
-
- 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
-
-
-
-
-
-
- 设置表名
-
-
-
-
-
-
- 动态Type,在使用 Delete<object> 后使用本方法,指定实体类型
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
-
-
-
-
- 执行SQL语句,返回影响的行数
-
-
-
-
-
- 执行SQL语句,返回被删除的记录
- 注意:此方法只有 Postgresql/SqlServer 有效果
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 命令超时设置(秒)
-
-
-
-
-
-
- 追加准备插入的实体
-
- 实体
-
-
-
-
- 追加准备插入的实体
-
- 实体
-
-
-
-
- 追加准备插入的实体集合
-
- 实体集合
-
-
-
-
- 只插入的列,InsertColumns(a => a.Name) | InsertColumns(a => new{a.Name,a.Time}) | InsertColumns(a => new[]{"name","time"})
-
- lambda选择列
-
-
-
-
- 只插入的列
-
- 属性名,或者字段名
-
-
-
-
- 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"})
-
- lambda选择列
-
-
-
-
- 忽略的列
-
- 属性名,或者字段名
-
-
-
-
- 指定可插入自增字段
-
-
-
-
-
- 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
-
- 是否不使用参数化
-
-
-
-
- 批量执行选项设置,一般不需要使用该方法
- 各数据库 values, parameters 限制不一样,默认设置:
- MySql 5000 3000
- PostgreSQL 5000 3000
- SqlServer 1000 2100
- Oracle 500 999
- Sqlite 5000 999
- 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。
-
- 指定根据 values 上限数量拆分执行
- 指定根据 parameters 上限数量拆分执行
- 是否自动开启事务
-
-
-
-
- 批量执行时,分批次执行的进度状态
-
- 批量执行时的回调委托
-
-
-
-
- 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
-
-
-
-
-
-
- 设置表名
-
-
-
-
-
-
- 动态Type,在使用 Insert<object> 后使用本方法,指定实体类型
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
-
-
-
-
- 执行SQL语句,返回影响的行数
-
-
-
-
-
- 执行SQL语句,返回自增值
- 注意:请检查实体类是否标记了 [Column(IsIdentity = true)]
-
-
-
-
-
- 执行SQL语句,返回插入后的记录
- 注意:此方法只有 Postgresql/SqlServer 有效果
-
-
-
-
-
- 返回 DataTable 以便做 BulkCopy 数据做准备
- 此方法会处理:
- 类型、表名、字段名映射
- IgnoreColumns、InsertColumns
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 命令超时设置(秒)
-
-
-
-
-
-
- 添加或更新,设置实体
-
- 实体
-
-
-
-
- 添加或更新,设置实体
-
- 实体
-
- 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
- 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
-
-
-
-
-
- 添加或更新,设置实体集合
-
- 实体集合
-
- 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
- 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
-
-
-
-
-
- 添加或更新,设置SQL
-
- 查询SQL
-
- 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
- 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
-
-
-
-
-
- 当记录存在时,什么都不做
- 换句话:只有记录不存在时才插入
-
-
-
-
-
- 当记录存在时,指定只更新的字段,UpdateColumns(a => a.Name) | UpdateColumns(a => new{a.Name,a.Time}) | UpdateColumns(a => new[]{"name","time"})
-
- lambda选择列
-
-
-
-
- 当记录存在时,指定只更新的字段
-
- 属性名,或者字段名
-
-
-
-
- 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
-
-
-
-
-
-
- 设置表名
-
-
-
-
-
-
- 动态Type,在使用 Update<object> 后使用本方法,指定实体类型
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
-
-
-
-
- 执行SQL语句,返回影响的行数
-
-
-
-
-
- 自动产生 as1, as2, as3 .... 字段别名
- 这种方法可以最大程度防止多表,存在相同字段的问题
-
-
-
-
- 使用属性名作为字段别名
-
-
-
-
- 控制取消本次查询
- * 不会产生额外的异常
- * 取消成功,则不执行 SQL 命令
- * 取消成功,直接返回没有记录时候的返回值
- * 取消成功,如 List<T> 返回 0 元素列表,不是 null,仍然是旧机制
-
- 返回 true,则不会执行 SQL 命令
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 指定连接对象
-
-
-
-
-
-
- 使用自定义参数化,UnionALL 或者 ToSql 可能有需要
-
-
-
-
-
-
- 命令超时设置(秒)
-
-
-
-
-
-
- 审核或跟踪 ToList 即将返回的数据
-
-
-
-
-
-
- 执行SQL查询,返回 DataTable
-
-
-
-
-
- 执行SQL查询,返回 properties 指定的实体类属性,并以 DataTable 接收
-
- 属性名:Name导航属性:Parent.Name多表:b.Name
-
-
-
-
- 以字典的形式返回查询结果
- 注意:字典的特点会导致返回的数据无序
-
-
-
-
-
-
-
- 执行SQL查询,返回 T1 实体所有字段的记录,记录不存在时返回 Count 为 0 的列表
- 注意:
- 1、ToList(a => a) 可以返回 a 所有实体
- 2、ToList(a => new { a }) 这样也可以
- 3、ToList((a, b, c) => new { a, b, c }) 这样也可以
- 4、abc 怎么来的?请试试 fsql.Select<T1, T2, T3>()
-
-
-
-
-
- 执行SQL查询,返回 T1 实体、以及 LeftJoin/InnerJoin/RightJoin 对象
-
- false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据
-
-
-
-
- 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
-
- 数据块的大小
- 处理数据块
- false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据
-
-
-
- 执行SQL查询,返回 field 指定字段的记录,并以元组或基础类型(int,string,long)接收,记录不存在时返回 Count 为 0 的列表
-
-
-
-
-
-
-
- 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
-
-
-
-
-
- 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
-
-
-
-
-
- 将查询转为删除对象,以便支持导航对象或其他查询功能删除数据,如下:
- fsql.Select<T1>().Where(a => a.Options.xxx == 1).ToDelete().ExecuteAffrows()
- 注意:此方法不是将数据查询到内存循环删除,上面的代码产生如下 SQL 执行:
- DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1id = a.id where b.xxx = 1)
- 复杂删除使用该方案的好处:
- 1、删除前可预览测试数据,防止错误删除操作;
- 2、支持更加复杂的删除操作(IDelete 默认只支持简单的操作);
-
-
-
-
-
- 将查询转为更新对象,以便支持导航对象或其他查询功能更新数据,如下:
- fsql.Select<T1>().Where(a => a.Options.xxx == 1).ToUpdate().Set(a => a.Title, "111").ExecuteAffrows()
- 注意:此方法不是将数据查询到内存循环更新,上面的代码产生如下 SQL 执行:
- UPDATE `T1` SET Title = '111' WHERE id in (select a.id from T1 a left join Options b on b.t1id = a.id where b.xxx = 1)
- 复杂更新使用该方案的好处:
- 1、更新前可预览测试数据,防止错误更新操作;
- 2、支持更加复杂的更新操作(IUpdate 默认只支持简单的操作);
-
-
-
-
-
- 设置表名规则,可用于分库/分表,参数1:实体类型;参数2:默认表名;返回值:新表名;
- 设置多次,可查询分表后的多个子表记录,以 UNION ALL 形式执行。
- 如:select.AsTable((type, oldname) => "table_1").AsTable((type, oldname) => "table_2").AsTable((type, oldname) => "table_3").ToSql(a => a.Id);
- select * from (SELECT a."Id" as1 FROM "table_1" a) ftb
- UNION ALL select * from (SELECT a."Id" as1 FROM "table_2" a) ftb
- UNION ALL select * from (SELECT a."Id" as1 FROM "table_3" a) ftb
- 还可以这样:select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList()
-
-
-
-
-
-
- 设置别名规则,可用于拦截表别名,实现类似 sqlserver 的 with(nolock) 需求
- 如:select.AsAlias((_, old) => $"{old} with(lock)")
-
-
-
-
-
-
- 动态Type,在使用 Select<object> 后使用本方法,指定实体类型
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
- 指定字段
-
-
-
-
- 执行SQL查询,是否有记录
-
-
-
-
-
- 查询的记录数量
-
-
-
-
-
- 查询的记录数量,以参数out形式返回
-
- 返回的变量
-
-
-
-
- 指定从主库查询(默认查询从库)
-
-
-
-
-
- 左联查询,使用导航属性自动生成SQL
-
- 表达式
-
-
-
-
- 联接查询,使用导航属性自动生成SQL
-
- 表达式
-
-
-
-
- 右联查询,使用导航属性自动生成SQL
-
- 表达式
-
-
-
-
- 左联查询,指定关联的实体类型
-
- 关联的实体类型
- 表达式
-
-
-
-
- 联接查询,指定关联的实体类型
-
- 关联的实体类型
- 表达式
-
-
-
-
- 右联查询,指定关联的实体类型
-
- 关联的实体类型
- 表达式
-
-
-
-
- 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 在 JOIN 位置插入 SQL 内容
- 如:.RawJoin("OUTER APPLY ( select id from t2 ) b")
-
-
-
-
-
-
- 原生sql语法条件,Where("id = @id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- true 时生效
- sql语法条件
- 参数
-
-
-
-
- 动态过滤条件
-
-
-
-
-
-
- 禁用全局过滤功能,不传参数时将禁用所有
-
- 零个或多个过滤器名字
-
-
-
-
- 排他更新锁
- 注意:务必在开启事务后使用该功能
- MySql: for update
- SqlServer: With(UpdLock, RowLock, NoWait)
- PostgreSQL: for update nowait
- Oracle: for update nowait
- Sqlite: 无效果
- 达梦: for update nowait
- 人大金仓: for update nowait
- 神通: for update
-
- noawait
-
-
-
-
- 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法
- 参数
-
-
-
-
- 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 按原生sql语法排序,OrderBy("count(name) + @cc desc", new { cc = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法
- 参数
-
-
-
-
- 按原生sql语法排序,OrderBy(true, "count(name) + @cc desc", new { cc = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- true 时生效
- sql语法
- 参数
-
-
-
-
- 按属性名字符串排序(支持导航属性)
- 属性名:Name导航属性:Parent.Name多表:b.Name
-
- 属性名:Name导航属性:Parent.Name多表:b.Name
- 顺序 | 倒序
-
-
-
-
- 按属性名字符串排序(支持导航属性)
- 属性名:Name导航属性:Parent.Name多表:b.Name
-
- true 时生效
- 属性名:Name导航属性:Parent.Name多表:b.Name
- 顺序 | 倒序
-
-
-
-
- 查询向后偏移行数
-
-
-
-
-
-
- 查询向后偏移行数
-
- 行数
-
-
-
-
- 查询多少条数据
-
-
-
-
-
-
- 查询多少条数据
-
-
-
-
-
-
- 分页
-
- 第几页
- 每页多少
-
-
-
-
- 分页
-
- 分页信息
-
-
-
-
- 查询数据前,去重
-
- .Distinct().ToList(x => x.GroupName) 对指定字段去重
-
-
- .Distinct().ToList() 对整个查询去重
-
-
-
-
-
-
- 执行SQL查询,是否有记录
-
- lambda表达式
-
-
-
-
- 将查询转换为 INSERT INTO tableName SELECT ... FROM t 执行插入
-
-
- 指定插入的表名,若为 null 则使用 TTargetEntity 实体表名
- 选择列
- 返回影响的行数
-
-
-
- 执行SQL查询,返回 DataTable
-
-
-
-
-
- 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
-
- 返回类型
- 选择列
-
-
-
-
- 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Count 为 0 的列表
-
-
-
-
-
-
- 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
-
- 返回类型
- 选择列
- 数据块的大小
- 处理数据块
-
-
-
- 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
-
- 返回类型
- 选择列
-
-
-
-
- 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
-
-
-
-
-
-
- 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
-
- 返回类型
- 选择列
-
-
-
-
- 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
- 返回类型
- 选择列
- 字段别名
-
-
-
-
- 执行SQL查询,返回指定字段的聚合结果
-
-
-
-
-
-
-
- 执行SQL查询,返回指定字段的聚合结果给 output 参数
- fsql.Select<T>()
- .Aggregate(a => new { count = a.Count, sum = a.Sum(a.Key.Price) }, out var agg)
- .Page(1, 10).ToList();
-
-
-
-
-
-
-
-
- 求和
-
- 返回类型
- 列
-
-
-
-
- 最小值
-
- 返回类型
- 列
-
-
-
-
- 最大值
-
- 返回类型
- 列
-
-
-
-
- 平均值
-
- 返回类型
- 列
-
-
-
-
- 指定别名
-
- 别名
-
-
-
-
- 多表查询
-
-
-
-
-
-
-
- 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
-
- lambda表达式
-
-
-
-
- 查询条件,Where(true, a => a.Id > 10),支导航对象查询,Where(true, a => a.Author.Email == "2881099@qq.com")
-
- true 时生效
- lambda表达式
-
-
-
-
- 多表条件查询
-
-
- lambda表达式
-
-
-
-
- 多表条件查询
-
-
- lambda表达式
-
-
-
-
- 多表条件查询
-
-
-
- lambda表达式
-
-
-
-
- 多表条件查询
-
-
-
-
- lambda表达式
-
-
-
-
- 多表条件查询
-
-
-
-
-
- lambda表达式
-
-
-
-
- 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
- 是否标识为NOT
-
-
-
-
- 多表查询时,该方法标记后,表达式条件将对所有表进行附加
-
- 例如:软删除、租户,每个表都给条件,挺麻烦的
-
- fsql.Select<T1>().LeftJoin<T2>(...).Where<T2>((t1, t2 => t1.IsDeleted == false && t2.IsDeleted == false)
-
- 修改:fsql.Select<T1>().LeftJoin<T2>(...).WhereCascade(t1 => t1.IsDeleted == false)
-
- 当其中的实体可附加表达式才会进行,表越多时收益越大
-
-
-
-
-
-
- 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time})
-
-
-
-
-
-
- 按列排序,OrderBy(a => a.Time)
-
-
-
-
-
-
-
- 按列排序,OrderBy(true, a => a.Time)
-
-
- true 时生效
-
-
-
-
-
- 按列排序,OrderByIf(true, a => a.Time)
-
-
- true 时生效
-
- true: DESC, false: ASC
-
-
-
-
- 按列倒向排序,OrderByDescending(a => a.Time)
-
- 列
-
-
-
-
- 按列倒向排序,OrderByDescending(true, a => a.Time)
-
- true 时生效
- 列
-
-
-
-
- 贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
-
-
- 选择一个导航属性
-
-
-
-
- 贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
-
-
- true 时生效
- 选择一个导航属性
-
-
-
-
- 贪婪加载集合的导航属性,其实是分两次查询,ToList 后进行了数据重装
- 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
-
-
- 选择一个集合的导航属性,如: .IncludeMany(a => a.Tags)
- 可以 .Where 设置临时的关系映射,如: .IncludeMany(a => a.Tags.Where(tag => tag.TypeId == a.Id))
- 可以 .Take(5) 每个子集合只取5条,如: .IncludeMany(a => a.Tags.Take(5))
- 可以 .Select 设置只查询部分字段,如: (a => new TNavigate { Title = a.Title })
-
- 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?)
-
-
-
-
- 按属性名字符串进行 Include/IncludeMany 操作
-
-
-
-
-
-
- 按属性名字符串进行 Include/IncludeMany 操作
-
- true 时生效
-
-
-
-
-
- 实现 select .. from ( select ... from t ) a 这样的功能
- 使用 AsTable 方法也可以达到效果
- 示例:WithSql("select * from id=@id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- SQL语句
- 参数
-
-
-
-
- 实现 select .. from ( select .. UNION ALL select .. ) a 这样的功能(基于内存数据)
-
- 内存数据
-
-
-
-
- 嵌套查询 select * from ( select ... from table ... ) a
-
-
-
-
-
-
-
- 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
-
- lambda表达式
-
-
-
-
- 查询条件,Where(true, a => a.Id > 10),支导航对象查询,Where(true, a => a.Author.Email == "2881099@qq.com")
-
- true 时生效
- lambda表达式
-
-
-
-
- 按列排序,OrderBy(a => a.Time)
-
-
-
-
-
-
-
- 按列倒向排序,OrderByDescending(a => a.Time)
-
- 列
-
-
-
-
- 按聚合条件过滤,Having(a => a.Count() > 10)
-
- lambda表达式
-
-
-
-
- 按聚合条件过滤,HavingIf(true, a => a.Count() > 10)
-
- true 时生效
- lambda表达式
-
-
-
-
- 按列排序,OrderBy(a => a.Time)
-
-
-
-
-
-
-
- 按列倒向排序,OrderByDescending(a => a.Time)
-
- 列
-
-
-
-
- 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
-
- 返回类型
- 选择列
-
-
-
-
- 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
-
-
-
-
-
-
-
- 【linq to sql】专用方法,不建议直接使用
-
-
-
-
- 返回即将执行的SQL语句
-
- 返回类型
- 选择列
-
-
-
-
-
- 返回即将执行的SQL语句
-
- 指定字段
-
-
-
-
- 嵌套查询 select * from ( select ... from table group by ... ) a
-
-
-
-
-
-
-
- 查询向后偏移行数
-
-
-
-
-
-
- 查询向后偏移行数
-
- 行数
-
-
-
-
- 查询多少条数据
-
-
-
-
-
-
- 查询多少条数据
-
-
-
-
-
-
- 分页
-
- 第几页
- 每页多少
-
-
-
-
- 分页
-
- 分页信息
-
-
-
-
- 查询的记录数量
-
-
-
-
-
- 查询的记录数量,以参数out形式返回
-
- 返回的变量
-
-
-
-
- 分组的数据
-
-
-
-
- 记录总数
-
-
-
-
-
- 求和
-
-
-
-
-
-
-
- 平均值
-
-
-
-
-
-
-
- 最大值
-
-
-
-
-
-
-
- 最小值
-
-
-
-
-
-
- 所有元素
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 指定事务对象
-
-
-
-
-
-
- 命令超时设置(秒)
-
-
-
-
-
-
- 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
-
- 是否不使用参数化
-
-
-
-
- 批量执行选项设置,一般不需要使用该方法
- 各数据库 rows, parameters 限制不一样,默认设置:
- MySql 500 3000
- PostgreSQL 500 3000
- SqlServer 500 2100
- Oracle 200 999
- Sqlite 200 999
- 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。
-
- 指定根据 rows 上限数量拆分执行
- 指定根据 parameters 上限数量拆分执行
- 是否自动开启事务
-
-
-
-
- 批量执行时,分批次执行的进度状态
-
- 批量执行时的回调委托
-
-
-
-
- 更新数据,设置更新的实体
- 注意:实体必须定义主键,并且最终会自动附加条件 where id = source.Id
-
- 实体
-
-
-
-
- 更新数据,设置更新的实体集合
- 注意:实体必须定义主键,并且最终会自动附加条件 where id in (source.Id)
-
- 实体集合
- 根据临时主键更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
- 忽略 IsVersion 乐观锁版本号
-
-
-
-
- 更新数据,设置更新的实体,同时设置忽略的列
- 忽略 null 属性:fsql.Update<T>().SetSourceAndIgnore(item, colval => colval == null)
- 注意:参数 ignore 与 IUpdate.IgnoreColumns/UpdateColumns 不能同时使用
-
- 实体
- 属性值忽略判断, true忽略
-
-
-
-
- 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"})
- 注意:不能与 UpdateColumns 不能同时使用
-
- lambda选择列
-
-
-
-
- 忽略的列
- 注意:不能与 UpdateColumns 不能同时使用
-
- 属性名,或者字段名
-
-
-
-
- 指定的列,UpdateColumns(a => a.Name) | UpdateColumns(a => new{a.Name,a.Time}) | UpdateColumns(a => new[]{"name","time"})
- 注意:不能与 IgnoreColumns 不能同时使用
-
- lambda选择列
-
-
-
-
- 指定的列
- 注意:不能与 IgnoreColumns 同时使用
-
- 属性名,或者字段名
-
-
-
-
- 设置列的新值,Set(a => a.Name, "newvalue")
-
-
- lambda选择列
- 新值
-
-
-
-
- 设置列的新值,Set(a => a.Name, "newvalue")
-
-
- true 时生效
- lambda选择列
- 新值
-
-
-
-
- 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
-
- 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
-
-
-
-
-
-
-
- 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
-
- 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
-
-
- true 时生效
-
-
-
-
-
- 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法
- 参数
-
-
-
-
- 设置更新的列
- SetDto(new { title = "xxx", clicks = 2 })
- SetDto(new Dictionary<string, object> { ["title"] = "xxx", ["clicks"] = 2 })
- 注意:标记 [Column(CanUpdate = false)] 的属性不会被更新
-
- dto 或 Dictionary<string, object>
-
-
-
-
- lambda表达式条件,仅支持实体基础成员(不包含导航对象)
- 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
-
- lambda表达式条件
-
-
-
-
- lambda表达式条件,仅支持实体基础成员(不包含导航对象)
- 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
-
- true 时生效
- lambda表达式条件
-
-
-
-
- 原生sql语法条件,Where("id = @id", new { id = 1 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
- sql语法条件
- 参数
-
-
-
-
- 传入实体,将主键作为条件
-
- 实体
-
-
-
-
- 传入实体集合,将主键作为条件
-
- 实体集合
-
-
-
-
- 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
- 是否标识为NOT
-
-
-
-
- 禁用全局过滤功能,不传参数时将禁用所有
-
- 零个或多个过滤器名字
-
-
-
-
- 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
-
-
-
-
-
-
- 设置表名
-
-
-
-
-
-
- 动态Type,在使用 Update<object> 后使用本方法,指定实体类型
-
-
-
-
-
-
- 返回即将执行的SQL语句
-
-
-
-
-
- 执行SQL语句,返回影响的行数
-
-
-
-
-
- 执行SQL语句,返回更新后的记录
- 注意:此方法只有 Postgresql/SqlServer 有效果
-
-
-
-
-
- 主库连接池
-
-
-
-
- 从库连接池
-
-
-
-
- 数据库类型
-
-
-
-
- UseConnectionString 时候的值
-
-
-
-
- UseSalve 时候的值
-
-
-
-
- 唯一标识
-
-
-
-
- 开启事务(不支持异步)
-
- 事务体 () => {}
-
-
-
- 开启事务(不支持异步)
-
-
- 事务体 () => {}
-
-
-
- 当前线程的事务
-
-
-
-
- 将 new { id = 1 } 或者 Dictionary<string, object> 转换为 DbParameter[]
-
- new { id = 1 } 或者 Dictionary<string, object>
-
-
-
-
- SQL 命令执行类,fsql.Ado.CommandFluent("select * from user where age > @age", new { age = 25 })
- .WithConnection(connection)
- .WithTransaction(transaction)
- .WithParameter("age", 25)
- .WithParameter("id", 11)
- .CommandType(CommandType.Text)
- .CommandTimeout(60)
- .Query<T>(); 或者 ExecuteNonQuery/ExecuteScalar/ExecuteDataTable/ExecuteDataSet/ExecuteArray
-
-
-
-
-
-
-
- 测试数据库是否连接正确,本方法执行如下命令:
- MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1
- Oracle: SELECT 1 FROM dual
-
- 命令超时设置(秒)
- true: 成功, false: 失败
-
-
-
- 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
-
-
-
-
-
-
-
-
- 查询,ExecuteReader(dr => {}, "select * from user where age > @age", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
-
- 查询,ExecuteArray("select * from user where age > @age", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
-
- 查询,ExecuteDataSet("select * from user where age > @age; select 2", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
-
- 查询,ExecuteDataTable("select * from user where age > @age", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 在【主库】执行
-
-
-
-
-
-
-
- 在【主库】执行,ExecuteNonQuery("delete from user where age > @age", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 在【主库】执行
-
-
-
-
-
-
-
- 在【主库】执行,ExecuteScalar("select 1 from user where age > @age", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
- 执行SQL返回对象集合,Query<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
-
-
-
-
-
-
-
-
-
- 执行SQL返回对象集合,Query<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>("select * from user where age > @age; select * from address", new { age = 25 })
- 提示:parms 参数还可以传 Dictionary<string, object>
-
-
-
-
-
-
-
-
-
- 测试数据库是否连接正确,本方法执行如下命令:
- 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>
-
-
-
-
-
-
-
-
-
-
- 可自定义解析表达式
-
-
-
-
- 自定义实体的配置,方便和多个 ORM 共同使用
-
-
-
-
- 自定义实体的属性配置,方便和多个 ORM 共同使用
-
-
-
-
- 增删查改,执行命令之前触发
-
-
-
-
- 增删查改,执行命令完成后触发
-
-
-
-
- CodeFirst迁移,执行之前触发
-
-
-
-
- CodeFirst迁移,执行完成触发
-
-
-
-
- Insert/Update自动值处理
-
-
-
-
- ADO.NET DataReader 拦截
-
-
-
-
- 监视数据库命令对象(执行前,调试)
-
-
-
-
- 监视数据库命令对象(执行后,用于监视执行性能)
-
-
-
-
- 跟踪开始
-
-
-
-
- 跟踪结束
-
-
-
-
- 内置解析功能,可辅助您进行解析
-
-
-
-
- 需要您解析的表达式
-
-
-
-
- 解析后的内容
-
-
-
-
- 实体类型
-
-
-
-
- 实体配置
-
-
-
-
- 索引配置
-
-
-
-
- 实体类型
-
-
-
-
- 实体的属性
-
-
-
-
- 实体的属性配置
-
-
-
-
- 标识符,可将 CurdBefore 与 CurdAfter 进行匹配
-
-
-
-
- 操作类型
-
-
-
-
- 实体类型
-
-
-
-
- 实体类型的元数据
-
-
-
-
- 执行的 SQL
-
-
-
-
- 参数化命令
-
-
-
-
- 状态数据,可与 CurdAfter 共享
-
-
-
-
- 发生的错误
-
-
-
-
- 执行SQL命令,返回的结果
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 标识符,可将 SyncStructureBeforeEventArgs 与 SyncStructureAfterEventArgs 进行匹配
-
-
-
-
- 实体类型
-
-
-
-
- 状态数据,可与 SyncStructureAfter 共享
-
-
-
-
- 执行的 SQL
-
-
-
-
- 发生的错误
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 类型
-
-
-
-
- 属性列的元数据
-
-
-
-
- 反射的属性信息
-
-
-
-
- 获取实体的属性值,也可以设置实体的属性新值
-
-
-
-
- 实体对象
-
-
-
-
- 中断实体对象审计
- false: 每个实体对象的属性都会审计(默认)
- true: 每个实体对象只审计一次
-
-
-
-
- ADO.NET 数据流读取对象
-
-
-
-
- DataReader 对应的 Index 位置
-
-
-
-
- 获取 Index 对应的值,也可以设置拦截的新值
-
-
-
-
- 标识符,可将 CommandBefore 与 CommandAfter 进行匹配
-
-
-
-
- 状态数据,可与 CommandAfter 共享
-
-
-
-
- 发生的错误
-
-
-
-
- 执行SQL命令,返回的结果
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 标识符,可将 TraceBeforeEventArgs 与 TraceAfterEventArgs 进行匹配
-
-
-
-
- 状态数据,可与 TraceAfter 共享
-
-
-
-
- 备注
-
-
-
-
- 发生的错误
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
-
-
-
-
- 转小写同步结构,适用 PostgreSQL
-
-
-
-
- 转大写同步结构,适用 Oracle/达梦/人大金仓
-
-
-
-
- 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
- 本功能会影响 IFreeSql 首次访问的速度。
- 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
-
-
-
-
- 不使用命令参数化执行,针对 Insert/Update
-
-
-
-
- 是否生成命令参数化执行,针对 lambda 表达式解析
- 注意:常量不会参数化,变量才会做参数化
- var id = 100;
- fsql.Select<T>().Where(a => a.id == id) 会参数化
- fsql.Select<T>().Where(a => a.id == 100) 不会参数化
-
-
-
-
- 延时加载导航属性对象,导航属性需要声明 virtual
-
-
-
-
- 将实体类型与数据库对比,返回DDL语句
-
-
-
-
-
-
- 将实体类型集合与数据库对比,返回DDL语句
-
- 实体类型
-
-
-
-
- 将实体类型与数据库对比,返回DDL语句(指定表名)
-
- 实体类型
- 指定表名对比
-
-
-
-
- 同步实体类型到数据库
- 注意:生产环境中谨慎使用
-
-
-
-
-
- 同步实体类型集合到数据库
- 注意:生产环境中谨慎使用
-
-
-
-
-
- 同步实体类型到数据库(指定表名)
- 注意:生产环境中谨慎使用
-
- 实体类型
- 指定表名对比
- 强制同步结构,无视缓存每次都同步
-
-
-
- 根据 System.Type 获取数据库信息
-
-
-
-
-
-
- FreeSql FluentApi 配置实体,方法名与特性相同
-
-
-
-
-
-
-
- FreeSql FluentApi 配置实体,方法名与特性相同
-
-
-
-
-
-
-
- 获取 FreeSql FluentApi 配置实体的元数据
-
-
- 未使用ConfigEntity配置时,返回null
-
-
-
- 获取实体类核心配置
-
-
-
-
-
-
- 获取所有数据库
-
-
-
-
-
- 获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注
-
-
-
-
-
-
- 获取指定单表信息,包括列详情、主键、唯一键、索引、备注
-
- 表名,如:dbo.table1
- 是否忽略大小写
-
-
-
-
- 判断表是否存在
-
- 表名,如:dbo.table1
- 是否忽略大小写
-
-
-
-
- 获取数据库枚举类型int值
-
-
-
-
-
-
- 获取c#转换,(int)、(long)
-
-
-
-
-
-
- 获取c#值
-
-
-
-
-
-
- 获取c#类型,int、long
-
-
-
-
-
-
- 获取c#类型对象
-
-
-
-
-
-
- 获取ado.net读取方法, GetBoolean、GetInt64
-
-
-
-
-
-
- 序列化
-
-
-
-
-
-
- 反序列化
-
-
-
-
-
-
- 获取数据库枚举类型,适用 PostgreSQL
-
-
-
-
-
-
- 临时 LambdaExpression.Parameter
-
-
-
-
- 如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
-
-
-
-
-
-
- AsType, Ctor, ClearData 三处地方需要重新加载
-
-
-
-
- AsType, Ctor, ClearData 三处地方需要重新加载
-
-
-
-
- 动态读取 DescriptionAttribute 注释文本
-
-
-
-
-
-
- 通过属性的注释文本,通过 xml 读取
-
-
- Dict:key=属性名,value=注释
-
-
-
- 更新实体的元数据
-
-
-
-
- 执行更新的 SQL
-
-
-
-
- 执行更新命令的参数
-
-
-
-
- 执行更新命令影响的行
-
-
-
-
- 更新的实体数量
-
-
-
-
- 更新的实体
-
-
-
-
- 映射优先级,默认: Attribute > FluentApi > Aop
-
-
-
-
- 实体特性
- [Table(Name = "tabname")]
- [Column(Name = "table_id")]
-
-
-
-
- 流式接口
- fsql.CodeFirst.ConfigEntity(a => a.Name("tabname"))
- fsql.CodeFirst.ConfigEntity(a => a.Property(b => b.Id).Name("table_id"))
-
-
-
-
- AOP 特性 https://github.com/dotnetcore/FreeSql/wiki/AOP
- fsql.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = "public.tabname";
- fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = "table_id";
-
-
-
-
- 不进行任何处理
-
-
-
-
- 将帕斯卡命名字符串转换为下划线分隔字符串
-
- BigApple -> Big_Apple
-
-
-
-
- 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
-
- BigApple -> BIG_APPLE
-
-
-
-
- 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
-
- BigApple -> big_apple
-
-
-
-
- 将字符串转换为大写
-
- BigApple -> BIGAPPLE
-
-
-
-
- 将字符串转换为小写
-
- BigApple -> bigapple
-
-
-
-
- 创建一个过滤器
- 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
-
-
- 名字
- 表达式
-
-
-
-
- 创建一个动态过滤器,当 condition 返回值为 true 时才生效
- 场景:当登陆身份是管理员,则过滤条件不生效
- 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
-
-
- 名字
- 委托,返回值为 true 时才生效
- 表达式
-
-
-
-
- 创建一个过滤器(实体类型 属于指定 TEntity 才会生效)
- 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
-
-
- 名字
- 表达式
-
-
-
-
- 创建一个过滤器(实体类型 属于指定 TEntity 才会生效)
- 场景:当登陆身份是管理员,则过滤条件不生效
- 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
-
-
- 名字
- 委托,返回值为 true 时才生效
- 表达式
-
-
-
-
- 使用指定 DbConnection 连接执行
-
-
-
-
-
-
- 使用指定 DbTransaction 事务执行
-
-
-
-
-
-
- 增加参数化对象
-
- 参数名
- 参数值
- 修改本次创建好的参数化对象,比如将 parameterName 参数修改为 Output 类型
-
-
-
-
- 设置执行的命令类型,SQL文本、或存储过程
-
-
-
-
-
-
- 设置命令执行超时(秒)
-
-
-
-
-
-
- 分页信息
-
-
-
-
- 第几页,从1开始
-
-
-
-
- 每页多少
-
-
-
-
- 查询的记录数量
-
-
-
-
- 当前操作的数据
-
-
-
-
- 当前批次
-
-
-
-
- 总批次数量
-
-
-
-
- 获取 obj.CsName 属性值 MapType 之后的数据库值
-
-
-
-
-
-
- 获取 obj.CsName 属性原始值(不经过 MapType)
-
-
-
-
-
- 设置 obj.CsName 属性值
-
-
-
-
-
-
- 动态过滤条件
-
-
-
-
- 属性名:Name
- 导航属性:Parent.Name
- 多表:b.Name
-
-
-
-
- 操作符
-
-
-
-
- 值
-
-
-
-
- Filters 下的逻辑运算符
-
-
-
-
- 子过滤条件,它与当前的逻辑关系是 And
- 注意:当前 Field 可以留空
-
-
-
-
- like
-
-
-
-
- =
- Equal/Equals/Eq 效果相同
-
-
-
-
- =
- Equal/Equals/Eq 效果相同
-
-
-
-
- =
- Equal/Equals/Eq 效果相同
-
-
-
-
- <>
-
-
-
-
- >
-
-
-
-
- >=
-
-
-
-
- <
-
-
-
-
- <=
-
-
-
-
- >= and <
- 此时 Value 的值格式为逗号分割:value1,value2 或者数组
-
-
-
-
- >= and <
- 此时 Value 的值格式为逗号分割:date1,date2 或者数组
- 这是专门为日期范围查询定制的操作符,它会处理 date2 + 1,比如:
- 当 date2 选择的是 2020-05-30,那查询的时候是 < 2020-05-31
- 当 date2 选择的是 2020-05,那查询的时候是 < 2020-06
- 当 date2 选择的是 2020,那查询的时候是 < 2021
- 当 date2 选择的是 2020-05-30 12,那查询的时候是 < 2020-05-30 13
- 当 date2 选择的是 2020-05-30 12:30,那查询的时候是 < 2020-05-30 12:31
- 并且 date2 只支持以上 5 种格式 (date1 没有限制)
-
-
-
-
- in (1,2,3)
- 此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
-
-
-
-
- not in (1,2,3)
- 此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
-
-
-
-
- 自定义解析,此时 Field 为反射信息,Value 为静态方法的参数(string/Expression)
- 示范:{ Operator: "Custom", Field: "RawSql webapp1.DynamicFilterCustom,webapp1", Value: "(id,name) in ((1,'k'),(2,'m'))" }
- 注意:使用者自己承担【注入风险】
- 静态方法定义示范:
- namespace webapp1
- {
- public class DynamicFilterCustom
- {
- [DynamicFilterCustom]
- public static string RawSql(object sender, string value) => value;
- }
- }
-
-
-
-
- 授权 DynamicFilter 支持 Custom 自定义解析
-
-
-
-
- 是否放弃继续读取
-
-
-
-
- 中间表,多对多
-
-
-
-
- PostgreSQL 数组类型专属功能
- 方式一:select * from Role where Id in (RoleIds)
- class User {
- ____public int[] RoleIds { get; set; }
- ____[Navigate(nameof(RoleIds))]
- ____public List<Role> Roles { get; set; }
- }
- 方式二:select * from User where RoleIds @> Id
- class Role {
- ____public int Id { get; set; }
- ____[Navigate(nameof(User.RoleIds))]
- ____public List<User> Users { get; set; }
- }
-
-
-
-
- 是否可用
-
-
-
-
- 不可用错误
-
-
-
-
- 不可用时间
-
-
-
-
- 将对象池设置为不可用,后续 Get/GetAsync 均会报错,同时启动后台定时检查服务恢复可用
-
-
-
- 由【可用】变成【不可用】时返回true,否则返回false
-
-
-
- 统计对象池中的对象
-
-
-
-
- 统计对象池中的对象(完整)
-
-
-
-
- 获取资源
-
- 超时
-
-
-
-
- 获取资源
-
-
-
-
-
- 使用完毕后,归还资源
-
- 对象
- 是否重新创建
-
-
-
- 名称
-
-
-
-
- 池容量
-
-
-
-
- 默认获取超时设置
-
-
-
-
- 空闲时间,获取时若超出,则重新创建
-
-
-
-
- 异步获取排队队列大小,小于等于0不生效
-
-
-
-
- 获取超时后,是否抛出异常
-
-
-
-
- 监听 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自动释放
-
-
-
-
- 后台定时检查可用性间隔秒数
-
-
-
-
- 权重
-
-
-
-
- 对象池的对象被创建时
-
- 返回被创建的对象
-
-
-
- 销毁对象
-
- 资源对象
-
-
-
- 从对象池获取对象超时的时候触发,通过该方法统计
-
-
-
-
- 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
-
- 资源对象
-
-
-
- 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
-
- 资源对象
-
-
-
- 归还对象给对象池的时候触发
-
- 资源对象
-
-
-
- 检查可用性
-
- 资源对象
-
-
-
-
- 事件:可用时触发
-
-
-
-
- 事件:不可用时触发
-
-
-
-
- 所属对象池
-
-
-
-
- 在对象池中的唯一标识
-
-
-
-
- 资源对象
-
-
-
-
- 被获取的总次数
-
-
-
- 最后获取时的时间
-
-
-
- 最后归还时的时间
-
-
-
-
- 创建时间
-
-
-
-
- 最后获取时的线程id
-
-
-
-
- 最后归还时的线程id
-
-
-
-
- 重置 Value 值
-
-
-
-
- 对象池管理类
-
- 对象类型
-
-
-
- 后台定时检查可用性
-
-
-
-
-
- 创建对象池
-
- 池大小
- 池内对象的创建委托
- 获取池内对象成功后,进行使用前操作
-
-
-
- 创建对象池
-
- 策略
-
-
-
- 获取可用资源,或创建资源
-
-
-
-
-
-
- String resources used in FreeSql exceptions, etc.
-
-
- These strings are exposed publicly for use by database providers and extensions.
- It is unusual for application code to need these strings.
-
-
-
-
-
- 重写当前线程的 CurrentUICulture 属性,对
- 使用此强类型资源类的所有资源查找执行重写。
-
-
-
-
- [Table(AsTable = "{asTable}")] 特性值格式错误
-
-
-
-
- [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型
-
-
-
-
- {name}: Failed to get resource {statistics}
-
-
-
-
- {name}: An exception needs to be thrown
-
-
-
-
- 错误的表达式格式 {column}
-
-
-
-
- Chunk 功能之前不可使用 Select
-
-
-
-
- 安全起见,请务必在事务开启之后,再使用 ForUpdate
-
-
-
-
- 不能为 null
-
-
-
-
- {name} 不能为 null
-
-
-
-
- 无法匹配 {property}
-
-
-
-
- {property} 无法解析为表达式树
-
-
-
-
- 参数 masterConnectionString 不可为空,请检查 UseConnectionString
-
-
-
-
- 提交
-
-
-
-
- 连接失败,准备切换其他可用服务器
-
-
-
-
- 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒)
-
-
-
-
- Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
-
-
-
-
- Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
-
-
-
-
- Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性
-
-
-
-
- Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
-
-
-
-
- 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。
-
-
-
-
- DateRange 要求 Value 应该逗号分割,并且长度为 2
-
-
-
-
- DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm
-
-
-
-
- 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。
-
-
-
-
- SlaveConnectionString 数量与 SlaveWeights 不相同
-
-
-
-
- ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写)
-
-
-
-
- 属性名 {pName} 重复存在,请检查(注意:不区分大小写)
-
-
-
-
- {function} 功能要求实体类 {tableCsName} 必须有主键
-
-
-
-
- {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键
-
-
-
-
- {tbTypeFullName} 不是父子关系,无法使用该功能
-
-
-
-
- 这个特别的子查询不能解析
-
-
-
-
- 表达式错误,它的顶级对象不是 ParameterExpression:{exp}
-
-
-
-
- 表达式错误,它不是连续的 MemberAccess 类型:{exp}
-
-
-
-
- ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage}
-
-
-
-
- 未能解析分表字段值 {sqlWhere}
-
-
-
-
- AsTable 未实现的功能 {asTable}
-
-
-
-
- GBase 暂时不支持逗号以外的分割符
-
-
-
-
- tableName:{tableName} 生成了相同的分表名
-
-
-
-
- GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名
-
-
-
-
- 已经指定了 {first},不能再指定 {second}
-
-
-
-
- {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public
-
-
-
-
- Include 参数类型错误
-
-
-
-
- Include 参数类型错误,集合属性请使用 IncludeMany
-
-
-
-
- Include 参数类型错误,表达式类型应该为 MemberAccess
-
-
-
-
- IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性
-
-
-
-
- IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}})
-
-
-
-
- IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致
-
-
-
-
- IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess
-
-
-
-
- IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}})
-
-
-
-
- ISelect.InsertInto() 未选择属性: {displayCsharp}
-
-
-
-
- ISelect.InsertInto() 类型错误: {displayCsharp}
-
-
-
-
- InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键
-
-
-
-
- InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类
-
-
-
-
- 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载
-
-
-
-
- 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode}
-
-
-
-
- 【延时加载】实体类型 {trytbTypeName} 必须声明为 public
-
-
-
-
- ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName}
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)]
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage}
-
-
-
-
- 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】
-
-
-
-
- 映射异常:{name} 没有一个属性名相同
-
-
-
-
- Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决
-
-
-
-
- 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载
-
-
-
-
- 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType})
-
-
-
-
- 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同
-
-
-
-
- {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。
-
-
-
-
- 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性
-
-
-
-
- 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。
-
-
-
-
- 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)]
-
-
-
-
- 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致
-
-
-
-
- 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi}
-
-
-
-
- {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键
-
-
-
-
- 没有定义属性
-
-
-
-
- 未实现
-
-
-
-
- 未实现函数表达式 {exp} 解析
-
-
-
-
- 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量
-
-
-
-
- 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount})
-
-
-
-
- 未实现 MemberAccess 下的 Constant
-
-
-
-
- 未实现 {name}
-
-
-
-
- 不支持
-
-
-
-
- {dataType} 不支持 OrderByRandom 随机排序
-
-
-
-
- {property} 不是有效的导航属性
-
-
-
-
- {dbName} 找不到列 {memberName}
-
-
-
-
- 找不到 {CsName} 对应的列
-
-
-
-
- 找不到属性:{memberName}
-
-
-
-
- 找不到属性名 {proto}
-
-
-
-
- Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray}
-
-
-
-
- Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray}
-
-
-
-
- [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在
-
-
-
-
- 未指定 UseConnectionString 或者 UseConnectionFactory
-
-
-
-
- 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081
-
-
-
-
- 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}
-
-
-
-
- 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName}
-
-
-
-
- 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致
-
-
-
-
- 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。
-
-
-
-
- 参数 field 未指定
-
-
-
-
- {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T>
-
-
-
-
- {property} 参数错误,它不是有效的导航属性
-
-
-
-
- {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到
-
-
-
-
- {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接"
-
-
-
-
- 解析失败 {callExpMethodName} {message}
-
-
-
-
- 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079
-
-
-
-
- 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage}
-
-
-
-
- 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable
-
-
-
-
- properties 参数不能为空
-
-
-
-
- {property} 属性名无法找到
-
-
-
-
- Range 要求 Value 应该逗号分割,并且长度为 2
-
-
-
-
- 回滚
-
-
-
-
- 运行时错误,反射获取 IncludeMany 方法失败
-
-
-
-
- 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
-
-
-
-
- BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
-
-
-
-
- 【{thisName}】Block access and wait for recovery: {exMessage}
-
-
-
-
- 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
-
-
-
-
- 连接字符串错误
-
-
-
-
- 【{thisName}】连接字符串错误,请检查。
-
-
-
-
- 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台
-
-
-
-
- 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台
-
-
-
-
- FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
-
-
-
-
- FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
-
-
-
-
- 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
-
-
-
-
- -DB 参数错误,未提供 ConnectionString
-
-
-
-
- -DB 参数错误,格式为:MySql,ConnectionString
-
-
-
-
- -DB 参数错误,不支持的类型:"{dbargs}"
-
-
-
-
- {method} 是 FreeSql.Provider.{provider} 特有的功能
-
-
-
-
- fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
-
-
-
-
- 主库
-
-
-
-
- MygisGeometry.Parse 未实现 "{wkt}"
-
-
-
-
- -NameOptions 参数错误,格式为:0,0,0,0
-
-
-
-
- 未实现该功能
-
-
-
-
- 未实现错误,请反馈给作者
-
-
-
-
- 找不到 {name}
-
-
-
-
- FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
-
-
-
-
- 对象池
-
-
-
-
- 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名
-
-
-
-
- OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
-
-
-
-
- Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
-
-
-
-
- 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
-
-
-
-
- fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
-
-
-
-
- SelectMany 错误的类型:{typeFullName}
-
-
-
-
- 从库
-
-
-
-
- 类型 {objentityTypeFullName} 不可迁移
-
-
-
-
- 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个
-
-
-
-
- 未实现 {columnDbTypeTextFull} 类型映射
-
-
-
-
- 错误的参数设置:{args}
-
-
-
-
- {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
-
-
-
-
- 分表字段值 "{dt}" 不能小于 "{beginTime} "
-
-
-
-
- 分表字段值不能为 null
-
-
-
-
- 分表字段值 "{columnValue}" 不能转化成 DateTime
-
-
-
-
- 分表字段值 "{dt}" 未匹配到分表名
-
-
-
-
- T2 类型错误
-
-
-
-
- tableName 格式错误,示例:“log_{yyyyMMdd}”
-
-
-
-
- {Type}.AsType 参数错误,请传入正确的实体类型
-
-
-
-
- {thatFullName} 类型无法访问构造函数
-
-
-
-
- {name} 类型错误
-
-
-
-
- {Type}.AsType 参数不支持指定为 object
-
-
-
-
- 类型 {typeofFullName} 错误,不能使用 IncludeMany
-
-
-
-
- 无法解析表达式:{exp}
-
-
-
-
- 无法解析表达式方法 {exp3tmpCallMethodName}
-
-
-
-
- 请使用 fsql.InsertDict(dict) 方法插入字典数据
-
-
-
-
- C#: that >= between && that <= and
- SQL: that BETWEEN between AND and
-
-
-
-
-
-
-
-
- 注意:这个方法和 Between 有细微区别
- C#: that >= start && that < end
- SQL: that >= start and that < end
-
-
-
-
-
-
-
-
- 获取 Type 的原始 c# 文本表示
-
-
-
-
-
-
-
- 测量两个经纬度的距离,返回单位:米
-
- 经纬坐标1
- 经纬坐标2
- 返回距离(单位:米)
-
-
-
- 将 IEnumable<T> 转成 ISelect<T>,以便使用 FreeSql 的查询功能。此方法用于 Lambda 表达式中,快速进行集合导航的查询。
-
-
-
-
-
-
-
- 多表查询
-
-
-
-
-
- 本方法实现从已知的内存 List 数据,进行和 ISelect.IncludeMany 相同功能的贪婪加载
- 示例:new List<Song>(new[] { song1, song2, song3 }).IncludeMany(fsql, a => a.Tags);
- 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
-
-
-
-
-
- 选择一个集合的导航属性,如: .IncludeMany(a => a.Tags)
- 可以 .Where 设置临时的关系映射,如: .IncludeMany(a => a.Tags.Where(tag => tag.TypeId == a.Id))
- 可以 .Take(5) 每个子集合只取5条,如: .IncludeMany(a => a.Tags.Take(5))
- 可以 .Select 设置只查询部分字段,如: (a => new TNavigate { Title = a.Title })
-
- 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?)
-
-
-
-
- 本方法实现从已知的内存 List 数据,进行和 ISelect.IncludeMany/Include 相同功能的贪婪加载
- 集合:new List<Song>(new[] { song1, song2, song3 }).IncludeByPropertyName(fsql, "Tags", "ParentId=Id", 5, "Id,Name");
- 普通:new List<Song>(new[] { song1, song2, song3 }).IncludeByPropertyName(fsql, "Catetory");
- ---普通属性 where/take/select 参数将无效
- 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
-
-
-
-
- 选择一个集合或普通属性
- 设置临时的子集合关系映射,格式:子类属性=T1属性,多组以逗号分割
- 设置子集合只取条数
- 设置子集合只查询部分字段
-
-
-
-
-
- 查询数据,加工为树型 List 返回
- 注意:实体需要配置父子导航属性
-
-
-
-
-
-
-
- 使用递归 CTE 查询树型的所有子记录,或者所有父记录。
- 通过测试的数据库:MySql8.0、SqlServer、PostgreSQL、Oracle、Sqlite、Firebird、达梦、人大金仓、翰高
- 返回隐藏字段:.ToList(a => new { item = a, level = "a.cte_level", path = "a.cte_path" })
- * v2.0.0 兼容 MySql5.6 向上或向下查询,但不支持 pathSelector/pathSeparator 详细:https://github.com/dotnetcore/FreeSql/issues/536
-
-
-
- false(默认):由父级向子级的递归查询true:由子级向父级的递归查询
- 路径内容选择
- 连接路径内容
- 递归层级
-
-
-
-
- 随机排序
- 支持:MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/金仓/神通
- 不支持:MsAcess
-
-
-
-
-
- 插入数据字典 Dictionary<string, object>
-
-
-
-
-
-
- 插入数据字典,传入 Dictionary<string, object> 集合
-
-
-
-
-
-
- 更新数据字典 Dictionary<string, object>
-
-
-
-
-
-
- 更新数据字典,传入 Dictionary<string, object> 集合
-
-
-
-
-
-
- 插入或更新数据字典,此功能依赖数据库特性(低版本可能不支持),参考如下:
- MySql 5.6+: on duplicate key update
- PostgreSQL 9.4+: on conflict do update
- SqlServer 2008+: merge into
- Oracle 11+: merge into
- Sqlite: replace into
- 达梦: merge into
- 人大金仓:on conflict do update
- 神通:merge into
- MsAccess:不支持
-
-
-
-
-
-
- 删除数据字典 Dictionary<string, object>
-
-
-
-
-
-
- 删除数据字典,传入 Dictionary<string, object> 集合
-
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 and 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
-
-
-
- 使用 or 拼接两个 lambda 表达式
-
-
- true 时生效
-
-
-
-
-
- 将 lambda 表达式取反
-
-
- true 时生效
-
-
-
-
- 生成类似Mongodb的ObjectId有序、不重复Guid
-
-
-
-
-
- 插入数据
-
-
-
-
-
-
- 插入数据,传入实体
-
-
-
-
-
-
-
- 插入数据,传入实体数组
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
- 插入数据,传入实体集合
-
-
-
-
-
-
-
- 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
- MySql 5.6+: on duplicate key update
- PostgreSQL 9.4+: on conflict do update
- SqlServer 2008+: merge into
- Oracle 11+: merge into
- Sqlite: replace into
- 达梦: merge into
- 人大金仓:on conflict do update
- 神通:merge into
- MsAccess:不支持
- 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
-
-
-
-
-
-
- 修改数据
-
-
-
-
-
-
- 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 查询数据
-
-
-
-
-
-
- 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 删除数据
-
-
-
-
-
-
- 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
-
-
- 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
-
-
-
-
- 开启事务(不支持异步)
- v1.5.0 关闭了线程事务超时自动提交的机制
-
- 事务体 () => {}
-
-
-
- 开启事务(不支持异步)
- v1.5.0 关闭了线程事务超时自动提交的机制
-
-
- 事务体 () => {}
-
-
-
- 数据库访问对象
-
-
-
-
- 所有拦截方法都在这里
-
-
-
-
- CodeFirst 模式开发相关方法
-
-
-
-
- DbFirst 模式开发相关方法
-
-
-
-
- 全局过滤设置,可默认附加为 Select/Update/Delete 条件
-
-
-
-
+
+
+
+ FreeSql
+
+
+
+
+ 数据库列名
+
+
+
+
+ 指定数据库旧的列名,修改实体属性命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库字段;否则将视为【新增字段】
+
+
+
+
+ 数据库类型,如: varchar(255)
+ 字符串长度,可使用特性 [MaxLength(255)]
+
+
+
+
+ 主键
+
+
+
+
+ 自增标识
+
+
+
+
+ 是否可DBNull
+
+
+
+
+ 忽略此列,不迁移、不插入
+
+
+
+
+ 设置行锁(乐观锁)版本号,每次更新累加版本号,若更新整个实体时会附带当前的版本号判断(修改失败时抛出异常)
+
+
+
+
+ 类型映射,除了可做基本的类型映射外,特别介绍的功能:
+ 1、将 enum 属性映射成 typeof(string)
+ 2、将 对象 属性映射成 typeof(string),请安装扩展包 FreeSql.Extensions.JsonMap
+
+
+
+
+ 创建表时字段的位置(场景:实体继承后设置字段顺序),规则如下:
+
+ >0时排前面,1,2,3...
+
+ =0时排中间(默认)
+
+ <0时排后面,...-3,-2,-1
+
+
+
+
+ 该字段是否可以插入,默认值true,指定为false插入时该字段会被忽略
+
+
+
+
+ 该字段是否可以更新,默认值true,指定为false更新时该字段会被忽略
+
+
+
+
+ 标记属性为数据库服务器时间(utc/local),在插入的时候使用类似 getdate() 执行
+
+
+
+
+ 设置长度,针对 string/byte[] 类型避免 DbType 的繁琐设置
+ 提示:也可以使用 [MaxLength(100)]
+ ---
+ StringLength = 100 时,对应 DbType:
+ MySql -> varchar(100)
+ SqlServer -> nvarchar(100)
+ PostgreSQL -> varchar(100)
+ Oracle -> nvarchar2(100)
+ Sqlite -> nvarchar(100)
+ ---
+ StringLength < 0 时,对应 DbType:
+ MySql -> text (StringLength = -2 时,对应 longtext)
+ SqlServer -> nvarchar(max)
+ PostgreSQL -> text
+ Oracle -> nclob
+ Sqlite -> text
+ v1.6.0+ byte[] 支持设置 StringLength
+
+
+
+
+ 执行 Insert 方法时使用此值
+ 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
+
+
+
+
+ decimal/numeric 类型的长度
+
+
+
+
+ decimal/numeric 类型的小数位长度
+
+
+
+
+ 重写功能
+ 比如:[Column(RewriteSql = "geography::STGeomFromText({0},4236)")]
+ 插入:INSERT INTO [table]([geo]) VALUES(geography::STGeomFromText('...',4236))
+ 提示:更新也生效
+
+
+
+
+ 重读功能
+ 比如:[Column(RereadSql = "{0}.STAsText()")]
+ 查询:SELECT a.[id], a.[geo].STAsText() FROM [table] a
+
+
+
+
+ 数据库列名
+
+
+
+
+ 指定数据库旧的列名,修改实体属性命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库字段;否则将视为【新增字段】
+
+
+
+
+ 数据库类型,如: varchar(255)
+
+
+
+
+ 主键
+
+
+
+
+ 自增标识
+
+
+
+
+ 是否可DBNull
+
+
+
+
+ 忽略此列,不迁移、不插入
+
+
+
+
+ 乐观锁
+
+
+
+
+ 类型映射,比如:可将 enum 属性映射成 typeof(string)
+
+
+
+
+
+
+ 创建表时字段位置,规则如下:
+
+ >0时排前面
+
+ =0时排中间(默认)
+
+ <0时排后面
+
+
+
+
+
+
+ 该字段是否可以插入,默认值true,指定为false插入时该字段会被忽略
+
+
+
+
+
+
+ 该字段是否可以更新,默认值true,指定为false更新时该字段会被忽略
+
+
+
+
+
+
+ 标记属性为数据库服务器时间(utc/local),在插入的时候使用类似 getdate() 执行
+
+
+
+
+
+
+ 设置长度,针对 string 类型避免 DbType 的繁琐设置
+ ---
+ StringLength = 100 时,对应 DbType:
+ MySql -> varchar(100)
+ SqlServer -> nvarchar(100)
+ PostgreSQL -> varchar(100)
+ Oracle -> nvarchar2(100)
+ Sqlite -> nvarchar(100)
+ ---
+ StringLength = -1 时,对应 DbType:
+ MySql -> text
+ SqlServer -> nvarchar(max)
+ PostgreSQL -> text
+ Oracle -> nvarchar2(4000)
+ Sqlite -> text
+
+
+
+
+ 执行 Insert 方法时使用此值
+ 注意:如果是 getdate() 这种请可考虑使用 ServerTime,因为它对数据库间作了适配
+
+
+
+
+
+
+ decimal/numeric 类型的长度/小数位长度
+
+ 总长度
+ 小数位长度
+
+
+
+
+ 重写功能
+ 比如:[Column(RewriteSql = "geography::STGeomFromText({0},4236)")]
+ 插入:INSERT INTO [table]([geo]) VALUES(geography::STGeomFromText('...',4236))
+ 提示:更新也生效
+
+
+
+
+
+
+ 重读功能
+ 比如:[Column(RereadSql = "{0}.STAsText()")]
+ 查询:SELECT a.[id], a.[geo].STAsText() FROM [table] a
+
+
+
+
+
+
+ 自定义表达式函数解析
+ 注意:请使用静态方法、或者在类上标记
+
+
+
+
+ 自定义表达式函数解析的时候,指定参数不解析 SQL,而是直接传进来
+
+
+
+
+ 数据库类型,可用于适配多种数据库环境
+
+
+
+
+ 已解析的表达式中参数内容
+
+
+
+
+ 表达式原始值
+
+
+
+
+ 主对象的参数化对象,可重塑其属性
+
+
+
+
+ 可附加参数化对象
+ 注意:本属性只有 Where 的表达式解析才可用
+
+
+
+
+ 将 c# 对象转换为 SQL
+
+
+
+
+ 返回表达式函数表示的 SQL 字符串
+
+
+
+
+ 获取实体元数据
+
+
+
+
+
+
+ 解析表达式
+
+
+
+
+
+
+ (非公开)内部公共工具类方法
+
+
+
+
+ 索引设置,如:[Index("{tablename}_idx_01", "name")]
+
+
+
+
+ 索引设置,如:[Index("{tablename}_idx_01", "name")]
+
+ 索引名v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
+ 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
+
+
+
+ 索引设置,如:[Index("{tablename}_idx_01", "name", true)]
+
+ 索引名v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
+ 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
+ 是否唯一
+
+
+
+ 索引名
+ v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
+
+
+
+
+ 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
+
+
+
+
+ 是否唯一
+
+
+
+
+ OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
+ ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
+ _________________public Category Category { get; set; }
+ OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
+ _________________public List<Topic> Topics { get; set; }
+
+
+
+
+ OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
+ ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
+ _________________public Category Category { get; set; }
+ OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
+ _________________public List<Topic> Topics { get; set; }
+
+
+
+
+ 与非主键进行关联,仅支持 OneToMany、ManyToOne
+ 使用方法参考 Bind 属性
+
+
+
+
+ 手工绑定 ManyToMany 导航关系
+
+
+
+
+ OneToOne:[Navigate(nameof(Primary))] <-> (缺省)外表.Primary
+ ManyToOne:Topic.cs 文件 [Navigate(nameof(Topic.CategoryId))] <-> (缺省)Category.Id
+ _________________public Category Category { get; set; }
+ OneToMany:Category.cs 文件 (缺省)Category.Id <-> [Navigate(nameof(Topic.CategoryId))]
+ _________________public List<Topic> Topics { get; set; }
+
+
+
+
+ 主键名
+
+
+
+
+ 数据库表名
+
+
+
+
+ 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
+
+
+
+
+ 禁用 CodeFirst 同步结构迁移
+
+
+
+
+ 格式:属性名=开始时间(递增)
+ 按年分表:[Table(Name = "log_{yyyy}", AsTable = "create_time=2022-1-1(1 year)")]
+ 按月分表:[Table(Name = "log_{yyyyMM}", AsTable = "create_time=2022-5-1(1 month)")]
+ 按日分表:[Table(Name = "log_{yyyyMMdd}", AsTable = "create_time=2022-5-1(5 day)")]
+ 按时分表:[Table(Name = "log_{yyyyMMddHH}", AsTable = "create_time=2022-5-1(6 hour)")]
+
+
+
+
+ 可以匹配以下条件(支持参数化):
+ `field` BETWEEN '2022-01-01 00:00:00' AND '2022-03-01 00:00:00'
+ `field` > '2022-01-01 00:00:00' AND `field` < '2022-03-01 00:00:00'
+ `field` > '2022-01-01 00:00:00' AND `field` <= '2022-03-01 00:00:00'
+ `field` >= '2022-01-01 00:00:00' AND `field` < '2022-03-01 00:00:00'
+ `field` >= '2022-01-01 00:00:00' AND `field` <= '2022-03-01 00:00:00'
+ `field` > '2022-01-01 00:00:00'
+ `field` >= '2022-01-01 00:00:00'
+ `field` < '2022-01-01 00:00:00'
+ `field` <= '2022-01-01 00:00:00'
+
+
+
+
+
+
+ 数据库表名
+
+
+
+
+ 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
+
+
+
+
+ 禁用 CodeFirst 同步结构迁移
+
+
+
+
+ 导航关系Fluent,与 NavigateAttribute 对应
+
+
+
+ 多对多关系的中间实体类型
+
+
+
+
+ 设置实体的索引
+
+ 索引名
+ 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
+ 是否唯一
+
+
+
+
+ 数据库表名
+
+
+
+
+ 指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】
+
+
+
+
+ 禁用 CodeFirst 同步结构迁移
+
+
+
+
+ 导航关系Fluent,与 NavigateAttribute 对应
+
+
+
+
+ 多对多关系的中间实体类型
+
+
+
+
+ 设置实体的索引
+
+ 索引名
+ 索引字段,为属性名以逗号分隔,如:Create_time ASC, Title ASC
+ 是否唯一
+
+
+
+
+ 所属表
+
+
+
+
+ 列名
+
+
+
+
+ 映射到 C# 类型
+
+
+
+
+ 数据库枚举类型int值
+
+
+
+
+ 数据库类型,字符串,varchar
+
+
+
+
+ 数据库类型,字符串,varchar(255)
+
+
+
+
+ 最大长度
+
+
+
+
+ 主键
+
+
+
+
+ 自增标识
+
+
+
+
+ 是否可DBNull
+
+
+
+
+ 备注,早期编码时少按了一个字母,请使用 Comment
+
+
+
+
+ 备注
+
+
+
+
+ 数据库默认值
+
+
+
+
+ 字段位置
+
+
+
+
+ 枚举类型标识
+
+
+
+
+ 枚举项
+
+
+
+
+ 唯一标识
+
+
+
+
+ SqlServer下是Owner、PostgreSQL下是Schema、MySql下是数据库名
+
+
+
+
+ 表名
+
+
+
+
+ 表备注,SqlServer下是扩展属性 MS_Description
+
+
+
+
+ 表/视图
+
+
+
+
+ 列
+
+
+
+
+ 自增列
+
+
+
+
+ 主键/组合
+
+
+
+
+ 唯一键/组合
+
+
+
+
+ 索引/组合
+
+
+
+
+ 外键
+
+
+
+
+ 类型标识
+
+
+
+
+ 枚举项
+
+
+
+
+ 通用的 Odbc 实现,只能做基本的 Crud 操作
+ 不支持实体结构迁移、不支持分页(只能 Take 查询)
+
+ 通用实现为了让用户自己适配更多的数据库,比如连接 mssql 2000、db2 等数据库
+ 默认适配 SqlServer,可以继承后重新适配 FreeSql.Odbc.Default.OdbcAdapter,最好去看下代码
+
+ 适配新的 OdbcAdapter,请在 FreeSqlBuilder.Build 之后调用 IFreeSql.SetOdbcAdapter 方法设置
+
+
+
+
+ 武汉达梦数据库有限公司,基于 Odbc 的实现
+
+
+
+
+ Microsoft Office Access 是由微软发布的关联式数据库管理系统
+
+
+
+
+ 武汉达梦数据库有限公司,基于 DmProvider.dll 的实现
+
+
+
+
+ 北京人大金仓信息技术股份有限公司,基于 Odbc 的实现
+
+
+
+
+ 天津神舟通用数据技术有限公司,基于 System.Data.OscarClient.dll 的实现
+
+
+
+
+ 北京人大金仓信息技术股份有限公司,基于 Kdbndp.dll 的实现
+
+
+
+
+ Firebird 是一个跨平台的关系数据库,能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现
+
+
+
+
+ 自定义适配器,访问任何数据库
+ 注意:该类型不提供 DbFirst/CodeFirst 功能
+
+
+
+
+ 天津南大通用数据技术股份有限公司成立于2004年,是国产数据库、大数据领域的知名企业,基于 Odbc 的实现
+
+
+
+
+ 获取 IDbConnection 对应的 IFreeSql 实例
+
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+
+ 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
+ MySql 5.6+: on duplicate key update
+ PostgreSQL 9.4+: on conflict do update
+ SqlServer 2008+: merge into
+ Oracle 11+: merge into
+ Sqlite: replace into
+ Firebird: merge into
+ 达梦: merge into
+ 人大金仓:on conflict do update
+ 神通:merge into
+ MsAccess:不支持
+ 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
+
+
+
+
+
+
+
+ 修改数据
+
+
+
+
+
+
+
+ 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 查询数据
+
+
+
+
+
+
+
+ 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 删除数据
+
+
+
+
+
+
+
+ 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+
+ 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
+ MySql 5.6+: on duplicate key update
+ PostgreSQL 9.4+: on conflict do update
+ SqlServer 2008+: merge into
+ Oracle 11+: merge into
+ Sqlite: replace into
+ 达梦: merge into
+ 人大金仓:on conflict do update
+ 神通:merge into
+ MsAccess:不支持
+ 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
+
+
+
+
+
+
+
+ 修改数据
+
+
+
+
+
+
+
+ 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 查询数据
+
+
+
+
+
+
+
+ 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 删除数据
+
+
+
+
+
+
+
+ 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
+
+
+
+
+ 当Guid无值时,会生成有序的新值
+
+
+
+
+
+ 获取实体的主键值,多个主键返回数组
+
+
+
+
+
+
+
+
+ 获取实体的属性值
+
+
+
+
+
+
+
+
+
+ 获取实体的所有数据,以 (1, 2, xxx) 的形式
+
+
+
+
+
+
+
+
+ 使用新实体的值,复盖旧实体的值
+
+
+
+
+ 使用新实体的主键值,复盖旧实体的主键值
+
+
+
+
+ 设置实体中主键内的自增字段值(若存在)
+
+
+
+
+
+
+
+
+ 获取实体中主键内的自增字段值(若存在)
+
+
+
+
+
+
+
+ 清除实体的主键值,将自增、Guid类型的主键值清除
+
+
+
+
+
+
+
+ 清除实体的主键值,将自增、Guid类型的主键值清除
+
+
+
+
+
+
+
+ 对比两个实体值,返回相同/或不相同的列名
+
+
+
+
+
+
+
+
+
+
+ 设置实体中某属性的数值增加指定的值
+
+
+
+
+
+
+
+
+
+ 设置实体中某属性的值
+
+
+
+
+
+
+
+
+
+ 缓存执行 IUpdate.Set
+
+
+
+
+
+
+
+
+ SqlExt 是利用自定表达式函数解析功能,解析默认常用的SQL函数,欢迎 PR
+
+
+
+
+ rank() over(order by ...)
+
+
+
+
+
+ dense_rank() over(order by ...)
+
+
+
+
+
+ count() over(order by ...)
+
+
+
+
+
+ sum(..) over(order by ...)
+
+
+
+
+
+
+ avg(..) over(order by ...)
+
+
+
+
+
+ max(..) over(order by ...)
+
+
+
+
+
+
+
+ min(..) over(order by ...)
+
+
+
+
+
+
+
+ SqlServer row_number() over(order by ...)
+
+
+
+
+
+ isnull、ifnull、coalesce、nvl
+
+
+
+
+
+
+
+
+ count(distinct name)
+
+
+
+
+
+
+
+ 注意:使用者自己承担【注入风险】
+
+
+
+
+
+
+ 大于 >
+
+
+
+
+
+ 大于或等于 >=
+
+
+
+
+
+ 小于 <
+
+
+
+
+
+ 小于或等于 <=
+
+
+
+
+
+ case when .. then .. end
+
+
+
+
+
+ case when .. then .. end
+
+
+
+
+
+
+
+
+
+ MySql group_concat(distinct .. order by .. separator ..)
+
+
+
+
+
+
+ MySql find_in_set(str, strlist)
+
+
+
+
+
+
+
+
+ PostgreSQL string_agg(.., ..)
+
+
+
+
+
+
+
+ 使用连接串(推荐)
+
+ 数据库类型
+ 数据库连接串
+ 提供者的类型,一般不需要指定,如果一直提示“缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载”的错误,说明反射获取不到类型,此时该参数可排上用场例如:typeof(FreeSql.SqlServer.SqlServerProvider<>)
+
+
+
+
+ 使用从数据库,支持多个
+
+ 从数据库连接串
+
+
+
+
+ 使用自定义数据库连接对象(放弃内置对象连接池技术)
+
+ 数据库类型
+ 数据库连接对象创建器
+ 提供者的类型,一般不需要指定,如果一直提示“缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载”的错误,说明反射获取不到类型,此时该参数可排上用场例如:typeof(FreeSql.SqlServer.SqlServerProvider<>)
+
+
+
+
+ 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
+ 注意:生产环境中谨慎使用
+
+ true:运行时检查自动同步结构, false:不同步结构(默认)
+
+
+
+
+ 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
+ 本功能会影响 IFreeSql 首次访问的速度。
+ 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
+
+
+
+
+
+
+ 不使用命令参数化执行,针对 Insert/Update,也可临时使用 IInsert/IUpdate.NoneParameter()
+
+
+
+
+
+
+ 是否生成命令参数化执行,针对 lambda 表达式解析
+ 注意:常量不会参数化,变量才会做参数化
+ var id = 100;
+ fsql.Select<T>().Where(a => a.id == id) 会参数化
+ fsql.Select<T>().Where(a => a.id == 100) 不会参数化
+
+
+
+
+
+
+ 延时加载导航属性对象,导航属性需要声明 virtual
+
+
+
+
+
+
+ 监视数据库命令对象
+
+ 执行前
+ 执行后,可监视执行性能
+
+
+
+
+ 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)
+ 优先级小于 [Column(Name = "xxx")]
+
+
+
+
+
+
+ SQL名称是否使用 [] `` ""
+ true: SELECT .. FROM [table]
+ false: SELECT .. FROM table
+
+
+
+
+
+
+ 指定映射优先级
+ 例如表名:实体类名 < Aop < FluentApi < Attribute < AsTable
+ 事件 Aop -------> fsql.Aop.ConfigEntity/fsql.Aop.ConfigEntityProperty
+ 方法 FluentApi -> fsql.CodeFirst.ConfigEntity/fsql.CodeFirst.Entity
+ 特性 Attribute -> [Table(Name = xxx, ...)]
+ -----------------------------------------------------------------------------
+ 默认规则:关于映射优先级,Attribute 可以更直观排查问题,即使任何地方使用 FluentApi/Aop 设置 TableName 都不生效。
+ 调整规则:UseMappingPriority(Attribute, FluentApi, Aop)
+ 实体类名 < Attribute < FluentApi < Aop < AsTable
+
+
+
+
+
+
+
+
+
+ 监听 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自动释放连接池
+ 默认值: true
+
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 命令超时设置(秒)
+
+
+
+
+
+
+ lambda表达式条件,仅支持实体基础成员(不包含导航对象)
+ 若想使用导航对象,请使用 ISelect.ToDelete() 方法
+
+ lambda表达式条件
+
+
+
+
+ lambda表达式条件,仅支持实体基础成员(不包含导航对象)
+ 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
+
+ true 时生效
+ lambda表达式条件
+
+
+
+
+ 原生sql语法条件,Where("id = @id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 原生sql语法条件,Where("id = @id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ true 时生效
+ sql语法条件
+ 参数
+
+
+
+
+ 传入实体,将主键作为条件
+
+ 实体
+
+
+
+
+ 传入实体集合,将主键作为条件
+
+ 实体集合
+
+
+
+
+ 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+ 是否标识为NOT
+
+
+
+
+ 禁用全局过滤功能,不传参数时将禁用所有
+
+ 零个或多个过滤器名字
+
+
+
+
+ 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
+
+
+
+
+
+
+ 设置表名
+
+
+
+
+
+
+ 动态Type,在使用 Delete<object> 后使用本方法,指定实体类型
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+
+
+
+
+ 执行SQL语句,返回影响的行数
+
+
+
+
+
+ 执行SQL语句,返回被删除的记录
+ 注意:此方法只有 Postgresql/SqlServer 有效果
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 命令超时设置(秒)
+
+
+
+
+
+
+ 追加准备插入的实体
+
+ 实体
+
+
+
+
+ 追加准备插入的实体
+
+ 实体
+
+
+
+
+ 追加准备插入的实体集合
+
+ 实体集合
+
+
+
+
+ 只插入的列,InsertColumns(a => a.Name) | InsertColumns(a => new{a.Name,a.Time}) | InsertColumns(a => new[]{"name","time"})
+
+ lambda选择列
+
+
+
+
+ 只插入的列
+
+ 属性名,或者字段名
+
+
+
+
+ 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"})
+
+ lambda选择列
+
+
+
+
+ 忽略的列
+
+ 属性名,或者字段名
+
+
+
+
+ 指定可插入自增字段
+
+
+
+
+
+ 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
+
+ 是否不使用参数化
+
+
+
+
+ 批量执行选项设置,一般不需要使用该方法
+ 各数据库 values, parameters 限制不一样,默认设置:
+ MySql 5000 3000
+ PostgreSQL 5000 3000
+ SqlServer 1000 2100
+ Oracle 500 999
+ Sqlite 5000 999
+ 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。
+
+ 指定根据 values 上限数量拆分执行
+ 指定根据 parameters 上限数量拆分执行
+ 是否自动开启事务
+
+
+
+
+ 批量执行时,分批次执行的进度状态
+
+ 批量执行时的回调委托
+
+
+
+
+ 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
+
+
+
+
+
+
+ 设置表名
+
+
+
+
+
+
+ 动态Type,在使用 Insert<object> 后使用本方法,指定实体类型
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+
+
+
+
+ 执行SQL语句,返回影响的行数
+
+
+
+
+
+ 执行SQL语句,返回自增值
+ 注意:请检查实体类是否标记了 [Column(IsIdentity = true)]
+
+
+
+
+
+ 执行SQL语句,返回插入后的记录
+ 注意:此方法只有 Postgresql/SqlServer 有效果
+
+
+
+
+
+ 返回 DataTable 以便做 BulkCopy 数据做准备
+ 此方法会处理:
+ 类型、表名、字段名映射
+ IgnoreColumns、InsertColumns
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 命令超时设置(秒)
+
+
+
+
+
+
+ 添加或更新,设置实体
+
+ 实体
+
+
+
+
+ 添加或更新,设置实体
+
+ 实体
+
+ 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
+ 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
+
+
+
+
+
+ 添加或更新,设置实体集合
+
+ 实体集合
+
+ 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
+ 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
+
+
+
+
+
+ 添加或更新,设置SQL
+
+ 查询SQL
+
+ 根据临时主键插入或更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
+ 注意:不处理自增,因某些数据库依赖主键或唯一键,所以指定临时主键仅对 SqlServer/PostgreSQL/Firebird/达梦/南大通用/金仓/神通 有效
+
+
+
+
+
+ 当记录存在时,什么都不做
+ 换句话:只有记录不存在时才插入
+
+
+
+
+
+ 当记录存在时,指定只更新的字段,UpdateColumns(a => a.Name) | UpdateColumns(a => new{a.Name,a.Time}) | UpdateColumns(a => new[]{"name","time"})
+
+ lambda选择列
+
+
+
+
+ 当记录存在时,指定只更新的字段
+
+ 属性名,或者字段名
+
+
+
+
+ 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
+
+
+
+
+
+
+ 设置表名
+
+
+
+
+
+
+ 动态Type,在使用 Update<object> 后使用本方法,指定实体类型
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+
+
+
+
+ 执行SQL语句,返回影响的行数
+
+
+
+
+
+ 自动产生 as1, as2, as3 .... 字段别名
+ 这种方法可以最大程度防止多表,存在相同字段的问题
+
+
+
+
+ 使用属性名作为字段别名
+
+
+
+
+ 控制取消本次查询
+ * 不会产生额外的异常
+ * 取消成功,则不执行 SQL 命令
+ * 取消成功,直接返回没有记录时候的返回值
+ * 取消成功,如 List<T> 返回 0 元素列表,不是 null,仍然是旧机制
+
+ 返回 true,则不会执行 SQL 命令
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 指定连接对象
+
+
+
+
+
+
+ 使用自定义参数化,UnionALL 或者 ToSql 可能有需要
+
+
+
+
+
+
+ 命令超时设置(秒)
+
+
+
+
+
+
+ 审核或跟踪 ToList 即将返回的数据
+
+
+
+
+
+
+ 执行SQL查询,返回 DataTable
+
+
+
+
+
+ 执行SQL查询,返回 properties 指定的实体类属性,并以 DataTable 接收
+
+ 属性名:Name导航属性:Parent.Name多表:b.Name
+
+
+
+
+ 以字典的形式返回查询结果
+ 注意:字典的特点会导致返回的数据无序
+
+
+
+
+
+
+
+ 执行SQL查询,返回 T1 实体所有字段的记录,记录不存在时返回 Count 为 0 的列表
+ 注意:
+ 1、ToList(a => a) 可以返回 a 所有实体
+ 2、ToList(a => new { a }) 这样也可以
+ 3、ToList((a, b, c) => new { a, b, c }) 这样也可以
+ 4、abc 怎么来的?请试试 fsql.Select<T1, T2, T3>()
+
+
+
+
+
+ 执行SQL查询,返回 T1 实体、以及 LeftJoin/InnerJoin/RightJoin 对象
+
+ false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据
+
+
+
+
+ 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
+
+ 数据块的大小
+ 处理数据块
+ false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin 的导航数据
+
+
+
+ 执行SQL查询,返回 field 指定字段的记录,并以元组或基础类型(int,string,long)接收,记录不存在时返回 Count 为 0 的列表
+
+
+
+
+
+
+
+ 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
+
+
+
+
+
+ 执行SQL查询,返回 T1 实体所有字段的第一条记录,记录不存在时返回 null
+
+
+
+
+
+ 将查询转为删除对象,以便支持导航对象或其他查询功能删除数据,如下:
+ fsql.Select<T1>().Where(a => a.Options.xxx == 1).ToDelete().ExecuteAffrows()
+ 注意:此方法不是将数据查询到内存循环删除,上面的代码产生如下 SQL 执行:
+ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1id = a.id where b.xxx = 1)
+ 复杂删除使用该方案的好处:
+ 1、删除前可预览测试数据,防止错误删除操作;
+ 2、支持更加复杂的删除操作(IDelete 默认只支持简单的操作);
+
+
+
+
+
+ 将查询转为更新对象,以便支持导航对象或其他查询功能更新数据,如下:
+ fsql.Select<T1>().Where(a => a.Options.xxx == 1).ToUpdate().Set(a => a.Title, "111").ExecuteAffrows()
+ 注意:此方法不是将数据查询到内存循环更新,上面的代码产生如下 SQL 执行:
+ UPDATE `T1` SET Title = '111' WHERE id in (select a.id from T1 a left join Options b on b.t1id = a.id where b.xxx = 1)
+ 复杂更新使用该方案的好处:
+ 1、更新前可预览测试数据,防止错误更新操作;
+ 2、支持更加复杂的更新操作(IUpdate 默认只支持简单的操作);
+
+
+
+
+
+ 设置表名规则,可用于分库/分表,参数1:实体类型;参数2:默认表名;返回值:新表名;
+ 设置多次,可查询分表后的多个子表记录,以 UNION ALL 形式执行。
+ 如:select.AsTable((type, oldname) => "table_1").AsTable((type, oldname) => "table_2").AsTable((type, oldname) => "table_3").ToSql(a => a.Id);
+ select * from (SELECT a."Id" as1 FROM "table_1" a) ftb
+ UNION ALL select * from (SELECT a."Id" as1 FROM "table_2" a) ftb
+ UNION ALL select * from (SELECT a."Id" as1 FROM "table_3" a) ftb
+ 还可以这样:select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList()
+
+
+
+
+
+
+ 设置别名规则,可用于拦截表别名,实现类似 sqlserver 的 with(nolock) 需求
+ 如:select.AsAlias((_, old) => $"{old} with(lock)")
+
+
+
+
+
+
+ 动态Type,在使用 Select<object> 后使用本方法,指定实体类型
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+ 指定字段
+
+
+
+
+ 执行SQL查询,是否有记录
+
+
+
+
+
+ 查询的记录数量
+
+
+
+
+
+ 查询的记录数量,以参数out形式返回
+
+ 返回的变量
+
+
+
+
+ 指定从主库查询(默认查询从库)
+
+
+
+
+
+ 左联查询,使用导航属性自动生成SQL
+
+ 表达式
+
+
+
+
+ 联接查询,使用导航属性自动生成SQL
+
+ 表达式
+
+
+
+
+ 右联查询,使用导航属性自动生成SQL
+
+ 表达式
+
+
+
+
+ 左联查询,指定关联的实体类型
+
+ 关联的实体类型
+ 表达式
+
+
+
+
+ 联接查询,指定关联的实体类型
+
+ 关联的实体类型
+ 表达式
+
+
+
+
+ 右联查询,指定关联的实体类型
+
+ 关联的实体类型
+ 表达式
+
+
+
+
+ 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 在 JOIN 位置插入 SQL 内容
+ 如:.RawJoin("OUTER APPLY ( select id from t2 ) b")
+
+
+
+
+
+
+ 原生sql语法条件,Where("id = @id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ true 时生效
+ sql语法条件
+ 参数
+
+
+
+
+ 动态过滤条件
+
+
+
+
+
+
+ 禁用全局过滤功能,不传参数时将禁用所有
+
+ 零个或多个过滤器名字
+
+
+
+
+ 排他更新锁
+ 注意:务必在开启事务后使用该功能
+ MySql: for update
+ SqlServer: With(UpdLock, RowLock, NoWait)
+ PostgreSQL: for update nowait
+ Oracle: for update nowait
+ Sqlite: 无效果
+ 达梦: for update nowait
+ 人大金仓: for update nowait
+ 神通: for update
+
+ noawait
+
+
+
+
+ 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法
+ 参数
+
+
+
+
+ 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 按原生sql语法排序,OrderBy("count(name) + @cc desc", new { cc = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法
+ 参数
+
+
+
+
+ 按原生sql语法排序,OrderBy(true, "count(name) + @cc desc", new { cc = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ true 时生效
+ sql语法
+ 参数
+
+
+
+
+ 按属性名字符串排序(支持导航属性)
+ 属性名:Name导航属性:Parent.Name多表:b.Name
+
+ 属性名:Name导航属性:Parent.Name多表:b.Name
+ 顺序 | 倒序
+
+
+
+
+ 按属性名字符串排序(支持导航属性)
+ 属性名:Name导航属性:Parent.Name多表:b.Name
+
+ true 时生效
+ 属性名:Name导航属性:Parent.Name多表:b.Name
+ 顺序 | 倒序
+
+
+
+
+ 查询向后偏移行数
+
+
+
+
+
+
+ 查询向后偏移行数
+
+ 行数
+
+
+
+
+ 查询多少条数据
+
+
+
+
+
+
+ 查询多少条数据
+
+
+
+
+
+
+ 分页
+
+ 第几页
+ 每页多少
+
+
+
+
+ 分页
+
+ 分页信息
+
+
+
+
+ 查询数据前,去重
+
+ .Distinct().ToList(x => x.GroupName) 对指定字段去重
+
+
+ .Distinct().ToList() 对整个查询去重
+
+
+
+
+
+
+ 执行SQL查询,是否有记录
+
+ lambda表达式
+
+
+
+
+ 将查询转换为 INSERT INTO tableName SELECT ... FROM t 执行插入
+
+
+ 指定插入的表名,若为 null 则使用 TTargetEntity 实体表名
+ 选择列
+ 返回影响的行数
+
+
+
+ 执行SQL查询,返回 DataTable
+
+
+
+
+
+ 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
+
+ 返回类型
+ 选择列
+
+
+
+
+ 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Count 为 0 的列表
+
+
+
+
+
+
+ 执行SQL查询,分块返回数据,可减少内存开销。比如读取10万条数据,每次返回100条处理。
+
+ 返回类型
+ 选择列
+ 数据块的大小
+ 处理数据块
+
+
+
+ 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
+
+ 返回类型
+ 选择列
+
+
+
+
+ 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
+
+
+
+
+
+
+ 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
+
+ 返回类型
+ 选择列
+
+
+
+
+ 执行SQL查询,返回 TDto 映射的字段,记录不存在时返回 Dto 默认值
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+ 返回类型
+ 选择列
+ 字段别名
+
+
+
+
+ 执行SQL查询,返回指定字段的聚合结果
+
+
+
+
+
+
+
+ 执行SQL查询,返回指定字段的聚合结果给 output 参数
+ fsql.Select<T>()
+ .Aggregate(a => new { count = a.Count, sum = a.Sum(a.Key.Price) }, out var agg)
+ .Page(1, 10).ToList();
+
+
+
+
+
+
+
+
+ 求和
+
+ 返回类型
+ 列
+
+
+
+
+ 最小值
+
+ 返回类型
+ 列
+
+
+
+
+ 最大值
+
+ 返回类型
+ 列
+
+
+
+
+ 平均值
+
+ 返回类型
+ 列
+
+
+
+
+ 指定别名
+
+ 别名
+
+
+
+
+ 多表查询
+
+
+
+
+
+
+
+ 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
+
+ lambda表达式
+
+
+
+
+ 查询条件,Where(true, a => a.Id > 10),支导航对象查询,Where(true, a => a.Author.Email == "2881099@qq.com")
+
+ true 时生效
+ lambda表达式
+
+
+
+
+ 多表条件查询
+
+
+ lambda表达式
+
+
+
+
+ 多表条件查询
+
+
+ lambda表达式
+
+
+
+
+ 多表条件查询
+
+
+
+ lambda表达式
+
+
+
+
+ 多表条件查询
+
+
+
+
+ lambda表达式
+
+
+
+
+ 多表条件查询
+
+
+
+
+
+ lambda表达式
+
+
+
+
+ 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+ 是否标识为NOT
+
+
+
+
+ 多表查询时,该方法标记后,表达式条件将对所有表进行附加
+
+ 例如:软删除、租户,每个表都给条件,挺麻烦的
+
+ fsql.Select<T1>().LeftJoin<T2>(...).Where<T2>((t1, t2 => t1.IsDeleted == false && t2.IsDeleted == false)
+
+ 修改:fsql.Select<T1>().LeftJoin<T2>(...).WhereCascade(t1 => t1.IsDeleted == false)
+
+ 当其中的实体可附加表达式才会进行,表越多时收益越大
+
+
+
+
+
+
+ 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time})
+
+
+
+
+
+
+ 按列排序,OrderBy(a => a.Time)
+
+
+
+
+
+
+
+ 按列排序,OrderBy(true, a => a.Time)
+
+
+ true 时生效
+
+
+
+
+
+ 按列排序,OrderByIf(true, a => a.Time)
+
+
+ true 时生效
+
+ true: DESC, false: ASC
+
+
+
+
+ 按列倒向排序,OrderByDescending(a => a.Time)
+
+ 列
+
+
+
+
+ 按列倒向排序,OrderByDescending(true, a => a.Time)
+
+ true 时生效
+ 列
+
+
+
+
+ 贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
+
+
+ 选择一个导航属性
+
+
+
+
+ 贪婪加载导航属性,如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需此操作
+
+
+ true 时生效
+ 选择一个导航属性
+
+
+
+
+ 贪婪加载集合的导航属性,其实是分两次查询,ToList 后进行了数据重装
+ 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
+
+
+ 选择一个集合的导航属性,如: .IncludeMany(a => a.Tags)
+ 可以 .Where 设置临时的关系映射,如: .IncludeMany(a => a.Tags.Where(tag => tag.TypeId == a.Id))
+ 可以 .Take(5) 每个子集合只取5条,如: .IncludeMany(a => a.Tags.Take(5))
+ 可以 .Select 设置只查询部分字段,如: (a => new TNavigate { Title = a.Title })
+
+ 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?)
+
+
+
+
+ 按属性名字符串进行 Include/IncludeMany 操作
+
+
+
+
+
+
+ 按属性名字符串进行 Include/IncludeMany 操作
+
+ true 时生效
+
+
+
+
+
+ 实现 select .. from ( select ... from t ) a 这样的功能
+ 使用 AsTable 方法也可以达到效果
+ 示例:WithSql("select * from id=@id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ SQL语句
+ 参数
+
+
+
+
+ 实现 select .. from ( select .. UNION ALL select .. ) a 这样的功能(基于内存数据)
+
+ 内存数据
+
+
+
+
+ 嵌套查询 select * from ( select ... from table ... ) a
+
+
+
+
+
+
+
+ 查询条件,Where(a => a.Id > 10),支持导航对象查询,Where(a => a.Author.Email == "2881099@qq.com")
+
+ lambda表达式
+
+
+
+
+ 查询条件,Where(true, a => a.Id > 10),支导航对象查询,Where(true, a => a.Author.Email == "2881099@qq.com")
+
+ true 时生效
+ lambda表达式
+
+
+
+
+ 按列排序,OrderBy(a => a.Time)
+
+
+
+
+
+
+
+ 按列倒向排序,OrderByDescending(a => a.Time)
+
+ 列
+
+
+
+
+ 按聚合条件过滤,Having(a => a.Count() > 10)
+
+ lambda表达式
+
+
+
+
+ 按聚合条件过滤,HavingIf(true, a => a.Count() > 10)
+
+ true 时生效
+ lambda表达式
+
+
+
+
+ 按列排序,OrderBy(a => a.Time)
+
+
+
+
+
+
+
+ 按列倒向排序,OrderByDescending(a => a.Time)
+
+ 列
+
+
+
+
+ 执行SQL查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
+
+ 返回类型
+ 选择列
+
+
+
+
+ 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
+
+
+
+
+
+
+
+ 【linq to sql】专用方法,不建议直接使用
+
+
+
+
+ 返回即将执行的SQL语句
+
+ 返回类型
+ 选择列
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+ 指定字段
+
+
+
+
+ 嵌套查询 select * from ( select ... from table group by ... ) a
+
+
+
+
+
+
+
+ 查询向后偏移行数
+
+
+
+
+
+
+ 查询向后偏移行数
+
+ 行数
+
+
+
+
+ 查询多少条数据
+
+
+
+
+
+
+ 查询多少条数据
+
+
+
+
+
+
+ 分页
+
+ 第几页
+ 每页多少
+
+
+
+
+ 分页
+
+ 分页信息
+
+
+
+
+ 查询的记录数量
+
+
+
+
+
+ 查询的记录数量,以参数out形式返回
+
+ 返回的变量
+
+
+
+
+ 分组的数据
+
+
+
+
+ 记录总数
+
+
+
+
+
+ 求和
+
+
+
+
+
+
+
+ 平均值
+
+
+
+
+
+
+
+ 最大值
+
+
+
+
+
+
+
+ 最小值
+
+
+
+
+
+
+ 所有元素
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 指定事务对象
+
+
+
+
+
+
+ 命令超时设置(秒)
+
+
+
+
+
+
+ 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
+
+ 是否不使用参数化
+
+
+
+
+ 批量执行选项设置,一般不需要使用该方法
+ 各数据库 rows, parameters 限制不一样,默认设置:
+ MySql 500 3000
+ PostgreSQL 500 3000
+ SqlServer 500 2100
+ Oracle 200 999
+ Sqlite 200 999
+ 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。
+
+ 指定根据 rows 上限数量拆分执行
+ 指定根据 parameters 上限数量拆分执行
+ 是否自动开启事务
+
+
+
+
+ 批量执行时,分批次执行的进度状态
+
+ 批量执行时的回调委托
+
+
+
+
+ 更新数据,设置更新的实体
+ 注意:实体必须定义主键,并且最终会自动附加条件 where id = source.Id
+
+ 实体
+
+
+
+
+ 更新数据,设置更新的实体集合
+ 注意:实体必须定义主键,并且最终会自动附加条件 where id in (source.Id)
+
+ 实体集合
+ 根据临时主键更新,a => a.Name | a => new{a.Name,a.Time} | a => new[]{"name","time"}
+ 忽略 IsVersion 乐观锁版本号
+
+
+
+
+ 更新数据,设置更新的实体,同时设置忽略的列
+ 忽略 null 属性:fsql.Update<T>().SetSourceAndIgnore(item, colval => colval == null)
+ 注意:参数 ignore 与 IUpdate.IgnoreColumns/UpdateColumns 不能同时使用
+
+ 实体
+ 属性值忽略判断, true忽略
+
+
+
+
+ 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"})
+ 注意:不能与 UpdateColumns 不能同时使用
+
+ lambda选择列
+
+
+
+
+ 忽略的列
+ 注意:不能与 UpdateColumns 不能同时使用
+
+ 属性名,或者字段名
+
+
+
+
+ 指定的列,UpdateColumns(a => a.Name) | UpdateColumns(a => new{a.Name,a.Time}) | UpdateColumns(a => new[]{"name","time"})
+ 注意:不能与 IgnoreColumns 不能同时使用
+
+ lambda选择列
+
+
+
+
+ 指定的列
+ 注意:不能与 IgnoreColumns 同时使用
+
+ 属性名,或者字段名
+
+
+
+
+ 设置列的新值,Set(a => a.Name, "newvalue")
+
+
+ lambda选择列
+ 新值
+
+
+
+
+ 设置列的新值,Set(a => a.Name, "newvalue")
+
+
+ true 时生效
+ lambda选择列
+ 新值
+
+
+
+
+ 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
+
+ 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
+
+
+
+
+
+
+
+ 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
+
+ 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
+
+
+ true 时生效
+
+
+
+
+
+ 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法
+ 参数
+
+
+
+
+ 设置更新的列
+ SetDto(new { title = "xxx", clicks = 2 })
+ SetDto(new Dictionary<string, object> { ["title"] = "xxx", ["clicks"] = 2 })
+ 注意:标记 [Column(CanUpdate = false)] 的属性不会被更新
+
+ dto 或 Dictionary<string, object>
+
+
+
+
+ lambda表达式条件,仅支持实体基础成员(不包含导航对象)
+ 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
+
+ lambda表达式条件
+
+
+
+
+ lambda表达式条件,仅支持实体基础成员(不包含导航对象)
+ 若想使用导航对象,请使用 ISelect.ToUpdate() 方法
+
+ true 时生效
+ lambda表达式条件
+
+
+
+
+ 原生sql语法条件,Where("id = @id", new { id = 1 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+ sql语法条件
+ 参数
+
+
+
+
+ 传入实体,将主键作为条件
+
+ 实体
+
+
+
+
+ 传入实体集合,将主键作为条件
+
+ 实体集合
+
+
+
+
+ 传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+ 是否标识为NOT
+
+
+
+
+ 禁用全局过滤功能,不传参数时将禁用所有
+
+ 零个或多个过滤器名字
+
+
+
+
+ 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名;
+
+
+
+
+
+
+ 设置表名
+
+
+
+
+
+
+ 动态Type,在使用 Update<object> 后使用本方法,指定实体类型
+
+
+
+
+
+
+ 返回即将执行的SQL语句
+
+
+
+
+
+ 执行SQL语句,返回影响的行数
+
+
+
+
+
+ 执行SQL语句,返回更新后的记录
+ 注意:此方法只有 Postgresql/SqlServer 有效果
+
+
+
+
+
+ 主库连接池
+
+
+
+
+ 从库连接池
+
+
+
+
+ 数据库类型
+
+
+
+
+ UseConnectionString 时候的值
+
+
+
+
+ UseSalve 时候的值
+
+
+
+
+ 唯一标识
+
+
+
+
+ 开启事务(不支持异步)
+
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+
+
+ 事务体 () => {}
+
+
+
+ 当前线程的事务
+
+
+
+
+ 将 new { id = 1 } 或者 Dictionary<string, object> 转换为 DbParameter[]
+
+ new { id = 1 } 或者 Dictionary<string, object>
+
+
+
+
+ SQL 命令执行类,fsql.Ado.CommandFluent("select * from user where age > @age", new { age = 25 })
+ .WithConnection(connection)
+ .WithTransaction(transaction)
+ .WithParameter("age", 25)
+ .WithParameter("id", 11)
+ .CommandType(CommandType.Text)
+ .CommandTimeout(60)
+ .Query<T>(); 或者 ExecuteNonQuery/ExecuteScalar/ExecuteDataTable/ExecuteDataSet/ExecuteArray
+
+
+
+
+
+
+
+ 测试数据库是否连接正确,本方法执行如下命令:
+ MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1
+ Oracle: SELECT 1 FROM dual
+
+ 命令超时设置(秒)
+ true: 成功, false: 失败
+
+
+
+ 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
+
+
+
+
+
+
+
+
+ 查询,ExecuteReader(dr => {}, "select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+ 查询,ExecuteArray("select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+ 查询,ExecuteDataSet("select * from user where age > @age; select 2", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+ 查询,ExecuteDataTable("select * from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteNonQuery("delete from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 在【主库】执行
+
+
+
+
+
+
+
+ 在【主库】执行,ExecuteScalar("select 1 from user where age > @age", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
+
+
+
+
+
+
+
+
+
+ 执行SQL返回对象集合,Query<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>("select * from user where age > @age; select * from address", new { age = 25 })
+ 提示:parms 参数还可以传 Dictionary<string, object>
+
+
+
+
+
+
+
+
+
+ 可自定义解析表达式
+
+
+
+
+ 自定义实体的配置,方便和多个 ORM 共同使用
+
+
+
+
+ 自定义实体的属性配置,方便和多个 ORM 共同使用
+
+
+
+
+ 增删查改,执行命令之前触发
+
+
+
+
+ 增删查改,执行命令完成后触发
+
+
+
+
+ CodeFirst迁移,执行之前触发
+
+
+
+
+ CodeFirst迁移,执行完成触发
+
+
+
+
+ Insert/Update自动值处理
+
+
+
+
+ ADO.NET DataReader 拦截
+
+
+
+
+ 监视数据库命令对象(执行前,调试)
+
+
+
+
+ 监视数据库命令对象(执行后,用于监视执行性能)
+
+
+
+
+ 跟踪开始
+
+
+
+
+ 跟踪结束
+
+
+
+
+ 内置解析功能,可辅助您进行解析
+
+
+
+
+ 需要您解析的表达式
+
+
+
+
+ 解析后的内容
+
+
+
+
+ 实体类型
+
+
+
+
+ 实体配置
+
+
+
+
+ 索引配置
+
+
+
+
+ 实体类型
+
+
+
+
+ 实体的属性
+
+
+
+
+ 实体的属性配置
+
+
+
+
+ 标识符,可将 CurdBefore 与 CurdAfter 进行匹配
+
+
+
+
+ 操作类型
+
+
+
+
+ 实体类型
+
+
+
+
+ 实体类型的元数据
+
+
+
+
+ 执行的 SQL
+
+
+
+
+ 参数化命令
+
+
+
+
+ 状态数据,可与 CurdAfter 共享
+
+
+
+
+ 发生的错误
+
+
+
+
+ 执行SQL命令,返回的结果
+
+
+
+
+ 耗时(单位:Ticks)
+
+
+
+
+ 耗时(单位:毫秒)
+
+
+
+
+ 标识符,可将 SyncStructureBeforeEventArgs 与 SyncStructureAfterEventArgs 进行匹配
+
+
+
+
+ 实体类型
+
+
+
+
+ 状态数据,可与 SyncStructureAfter 共享
+
+
+
+
+ 执行的 SQL
+
+
+
+
+ 发生的错误
+
+
+
+
+ 耗时(单位:Ticks)
+
+
+
+
+ 耗时(单位:毫秒)
+
+
+
+
+ 类型
+
+
+
+
+ 属性列的元数据
+
+
+
+
+ 反射的属性信息
+
+
+
+
+ 获取实体的属性值,也可以设置实体的属性新值
+
+
+
+
+ 实体对象
+
+
+
+
+ 中断实体对象审计
+ false: 每个实体对象的属性都会审计(默认)
+ true: 每个实体对象只审计一次
+
+
+
+
+ ADO.NET 数据流读取对象
+
+
+
+
+ DataReader 对应的 Index 位置
+
+
+
+
+ 获取 Index 对应的值,也可以设置拦截的新值
+
+
+
+
+ 标识符,可将 CommandBefore 与 CommandAfter 进行匹配
+
+
+
+
+ 状态数据,可与 CommandAfter 共享
+
+
+
+
+ 发生的错误
+
+
+
+
+ 执行SQL命令,返回的结果
+
+
+
+
+ 耗时(单位:Ticks)
+
+
+
+
+ 耗时(单位:毫秒)
+
+
+
+
+ 标识符,可将 TraceBeforeEventArgs 与 TraceAfterEventArgs 进行匹配
+
+
+
+
+ 状态数据,可与 TraceAfter 共享
+
+
+
+
+ 备注
+
+
+
+
+ 发生的错误
+
+
+
+
+ 耗时(单位:Ticks)
+
+
+
+
+ 耗时(单位:毫秒)
+
+
+
+
+ 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
+
+
+
+
+ 转小写同步结构,适用 PostgreSQL
+
+
+
+
+ 转大写同步结构,适用 Oracle/达梦/人大金仓
+
+
+
+
+ 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
+ 本功能会影响 IFreeSql 首次访问的速度。
+ 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
+
+
+
+
+ 不使用命令参数化执行,针对 Insert/Update
+
+
+
+
+ 是否生成命令参数化执行,针对 lambda 表达式解析
+ 注意:常量不会参数化,变量才会做参数化
+ var id = 100;
+ fsql.Select<T>().Where(a => a.id == id) 会参数化
+ fsql.Select<T>().Where(a => a.id == 100) 不会参数化
+
+
+
+
+ 延时加载导航属性对象,导航属性需要声明 virtual
+
+
+
+
+ 将实体类型与数据库对比,返回DDL语句
+
+
+
+
+
+
+ 将实体类型集合与数据库对比,返回DDL语句
+
+ 实体类型
+
+
+
+
+ 将实体类型与数据库对比,返回DDL语句(指定表名)
+
+ 实体类型
+ 指定表名对比
+
+
+
+
+ 同步实体类型到数据库
+ 注意:生产环境中谨慎使用
+
+
+
+
+
+ 同步实体类型集合到数据库
+ 注意:生产环境中谨慎使用
+
+
+
+
+
+ 同步实体类型到数据库(指定表名)
+ 注意:生产环境中谨慎使用
+
+ 实体类型
+ 指定表名对比
+ 强制同步结构,无视缓存每次都同步
+
+
+
+ 根据 System.Type 获取数据库信息
+
+
+
+
+
+
+ FreeSql FluentApi 配置实体,方法名与特性相同
+
+
+
+
+
+
+
+ FreeSql FluentApi 配置实体,方法名与特性相同
+
+
+
+
+
+
+
+ 获取 FreeSql FluentApi 配置实体的元数据
+
+
+ 未使用ConfigEntity配置时,返回null
+
+
+
+ 获取实体类核心配置
+
+
+
+
+
+
+ 获取所有数据库
+
+
+
+
+
+ 获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注
+
+
+
+
+
+
+ 获取指定单表信息,包括列详情、主键、唯一键、索引、备注
+
+ 表名,如:dbo.table1
+ 是否忽略大小写
+
+
+
+
+ 判断表是否存在
+
+ 表名,如:dbo.table1
+ 是否忽略大小写
+
+
+
+
+ 获取数据库枚举类型int值
+
+
+
+
+
+
+ 获取c#转换,(int)、(long)
+
+
+
+
+
+
+ 获取c#值
+
+
+
+
+
+
+ 获取c#类型,int、long
+
+
+
+
+
+
+ 获取c#类型对象
+
+
+
+
+
+
+ 获取ado.net读取方法, GetBoolean、GetInt64
+
+
+
+
+
+
+ 序列化
+
+
+
+
+
+
+ 反序列化
+
+
+
+
+
+
+ 获取数据库枚举类型,适用 PostgreSQL
+
+
+
+
+
+
+ 临时 LambdaExpression.Parameter
+
+
+
+
+ 如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
+
+
+
+
+
+
+ AsType, Ctor, ClearData 三处地方需要重新加载
+
+
+
+
+ AsType, Ctor, ClearData 三处地方需要重新加载
+
+
+
+
+ 动态读取 DescriptionAttribute 注释文本
+
+
+
+
+
+
+ 通过属性的注释文本,通过 xml 读取
+
+
+ Dict:key=属性名,value=注释
+
+
+
+ 更新实体的元数据
+
+
+
+
+ 执行更新的 SQL
+
+
+
+
+ 执行更新命令的参数
+
+
+
+
+ 执行更新命令影响的行
+
+
+
+
+ 更新的实体数量
+
+
+
+
+ 更新的实体
+
+
+
+
+ 映射优先级,默认: Attribute > FluentApi > Aop
+
+
+
+
+ 实体特性
+ [Table(Name = "tabname")]
+ [Column(Name = "table_id")]
+
+
+
+
+ 流式接口
+ fsql.CodeFirst.ConfigEntity(a => a.Name("tabname"))
+ fsql.CodeFirst.ConfigEntity(a => a.Property(b => b.Id).Name("table_id"))
+
+
+
+
+ AOP 特性 https://github.com/dotnetcore/FreeSql/wiki/AOP
+ fsql.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = "public.tabname";
+ fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = "table_id";
+
+
+
+
+ 不进行任何处理
+
+
+
+
+ 将帕斯卡命名字符串转换为下划线分隔字符串
+
+ BigApple -> Big_Apple
+
+
+
+
+ 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
+
+ BigApple -> BIG_APPLE
+
+
+
+
+ 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
+
+ BigApple -> big_apple
+
+
+
+
+ 将字符串转换为大写
+
+ BigApple -> BIGAPPLE
+
+
+
+
+ 将字符串转换为小写
+
+ BigApple -> bigapple
+
+
+
+
+ 创建一个过滤器
+ 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
+
+
+ 名字
+ 表达式
+
+
+
+
+ 创建一个动态过滤器,当 condition 返回值为 true 时才生效
+ 场景:当登陆身份是管理员,则过滤条件不生效
+ 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
+
+
+ 名字
+ 委托,返回值为 true 时才生效
+ 表达式
+
+
+
+
+ 创建一个过滤器(实体类型 属于指定 TEntity 才会生效)
+ 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
+
+
+ 名字
+ 表达式
+
+
+
+
+ 创建一个过滤器(实体类型 属于指定 TEntity 才会生效)
+ 场景:当登陆身份是管理员,则过滤条件不生效
+ 提示:在 Lambda 中判断登陆身份,请参考资料 AsyncLocal
+
+
+ 名字
+ 委托,返回值为 true 时才生效
+ 表达式
+
+
+
+
+ 使用指定 DbConnection 连接执行
+
+
+
+
+
+
+ 使用指定 DbTransaction 事务执行
+
+
+
+
+
+
+ 增加参数化对象
+
+ 参数名
+ 参数值
+ 修改本次创建好的参数化对象,比如将 parameterName 参数修改为 Output 类型
+
+
+
+
+ 设置执行的命令类型,SQL文本、或存储过程
+
+
+
+
+
+
+ 设置命令执行超时(秒)
+
+
+
+
+
+
+ 分页信息
+
+
+
+
+ 第几页,从1开始
+
+
+
+
+ 每页多少
+
+
+
+
+ 查询的记录数量
+
+
+
+
+ 当前操作的数据
+
+
+
+
+ 当前批次
+
+
+
+
+ 总批次数量
+
+
+
+
+ 获取 obj.CsName 属性值 MapType 之后的数据库值
+
+
+
+
+
+
+ 获取 obj.CsName 属性原始值(不经过 MapType)
+
+
+
+
+
+ 设置 obj.CsName 属性值
+
+
+
+
+
+
+ 动态过滤条件
+
+
+
+
+ 属性名:Name
+ 导航属性:Parent.Name
+ 多表:b.Name
+
+
+
+
+ 操作符
+
+
+
+
+ 值
+
+
+
+
+ Filters 下的逻辑运算符
+
+
+
+
+ 子过滤条件,它与当前的逻辑关系是 And
+ 注意:当前 Field 可以留空
+
+
+
+
+ like
+
+
+
+
+ =
+ Equal/Equals/Eq 效果相同
+
+
+
+
+ =
+ Equal/Equals/Eq 效果相同
+
+
+
+
+ =
+ Equal/Equals/Eq 效果相同
+
+
+
+
+ <>
+
+
+
+
+ >
+
+
+
+
+ >=
+
+
+
+
+ <
+
+
+
+
+ <=
+
+
+
+
+ >= and <
+ 此时 Value 的值格式为逗号分割:value1,value2 或者数组
+
+
+
+
+ >= and <
+ 此时 Value 的值格式为逗号分割:date1,date2 或者数组
+ 这是专门为日期范围查询定制的操作符,它会处理 date2 + 1,比如:
+ 当 date2 选择的是 2020-05-30,那查询的时候是 < 2020-05-31
+ 当 date2 选择的是 2020-05,那查询的时候是 < 2020-06
+ 当 date2 选择的是 2020,那查询的时候是 < 2021
+ 当 date2 选择的是 2020-05-30 12,那查询的时候是 < 2020-05-30 13
+ 当 date2 选择的是 2020-05-30 12:30,那查询的时候是 < 2020-05-30 12:31
+ 并且 date2 只支持以上 5 种格式 (date1 没有限制)
+
+
+
+
+ in (1,2,3)
+ 此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
+
+
+
+
+ not in (1,2,3)
+ 此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
+
+
+
+
+ 自定义解析,此时 Field 为反射信息,Value 为静态方法的参数(string/Expression)
+ 示范:{ Operator: "Custom", Field: "RawSql webapp1.DynamicFilterCustom,webapp1", Value: "(id,name) in ((1,'k'),(2,'m'))" }
+ 注意:使用者自己承担【注入风险】
+ 静态方法定义示范:
+ namespace webapp1
+ {
+ public class DynamicFilterCustom
+ {
+ [DynamicFilterCustom]
+ public static string RawSql(object sender, string value) => value;
+ }
+ }
+
+
+
+
+ 授权 DynamicFilter 支持 Custom 自定义解析
+
+
+
+
+ 是否放弃继续读取
+
+
+
+
+ 中间表,多对多
+
+
+
+
+ PostgreSQL 数组类型专属功能
+ 方式一:select * from Role where Id in (RoleIds)
+ class User {
+ ____public int[] RoleIds { get; set; }
+ ____[Navigate(nameof(RoleIds))]
+ ____public List<Role> Roles { get; set; }
+ }
+ 方式二:select * from User where RoleIds @> Id
+ class Role {
+ ____public int Id { get; set; }
+ ____[Navigate(nameof(User.RoleIds))]
+ ____public List<User> Users { get; set; }
+ }
+
+
+
+
+ 是否可用
+
+
+
+
+ 不可用错误
+
+
+
+
+ 不可用时间
+
+
+
+
+ 将对象池设置为不可用,后续 Get/GetAsync 均会报错,同时启动后台定时检查服务恢复可用
+
+
+
+ 由【可用】变成【不可用】时返回true,否则返回false
+
+
+
+ 统计对象池中的对象
+
+
+
+
+ 统计对象池中的对象(完整)
+
+
+
+
+ 获取资源
+
+ 超时
+
+
+
+
+ 使用完毕后,归还资源
+
+ 对象
+ 是否重新创建
+
+
+
+ 名称
+
+
+
+
+ 池容量
+
+
+
+
+ 默认获取超时设置
+
+
+
+
+ 空闲时间,获取时若超出,则重新创建
+
+
+
+
+ 异步获取排队队列大小,小于等于0不生效
+
+
+
+
+ 获取超时后,是否抛出异常
+
+
+
+
+ 监听 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自动释放
+
+
+
+
+ 后台定时检查可用性间隔秒数
+
+
+
+
+ 权重
+
+
+
+
+ 对象池的对象被创建时
+
+ 返回被创建的对象
+
+
+
+ 销毁对象
+
+ 资源对象
+
+
+
+ 从对象池获取对象超时的时候触发,通过该方法统计
+
+
+
+
+ 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
+
+ 资源对象
+
+
+
+ 归还对象给对象池的时候触发
+
+ 资源对象
+
+
+
+ 检查可用性
+
+ 资源对象
+
+
+
+
+ 事件:可用时触发
+
+
+
+
+ 事件:不可用时触发
+
+
+
+
+ 所属对象池
+
+
+
+
+ 在对象池中的唯一标识
+
+
+
+
+ 资源对象
+
+
+
+
+ 被获取的总次数
+
+
+
+ 最后获取时的时间
+
+
+
+ 最后归还时的时间
+
+
+
+
+ 创建时间
+
+
+
+
+ 最后获取时的线程id
+
+
+
+
+ 最后归还时的线程id
+
+
+
+
+ 重置 Value 值
+
+
+
+
+ 对象池管理类
+
+ 对象类型
+
+
+
+ 后台定时检查可用性
+
+
+
+
+
+ 创建对象池
+
+ 池大小
+ 池内对象的创建委托
+ 获取池内对象成功后,进行使用前操作
+
+
+
+ 创建对象池
+
+ 策略
+
+
+
+ 获取可用资源,或创建资源
+
+
+
+
+
+
+ String resources used in FreeSql exceptions, etc.
+
+
+ These strings are exposed publicly for use by database providers and extensions.
+ It is unusual for application code to need these strings.
+
+
+
+
+
+ 重写当前线程的 CurrentUICulture 属性,对
+ 使用此强类型资源类的所有资源查找执行重写。
+
+
+
+
+ [Table(AsTable = "{asTable}")] 特性值格式错误
+
+
+
+
+ [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不是 DateTime 类型
+
+
+
+
+ {name}: Failed to get resource {statistics}
+
+
+
+
+ {name}: An exception needs to be thrown
+
+
+
+
+ 错误的表达式格式 {column}
+
+
+
+
+ Chunk 功能之前不可使用 Select
+
+
+
+
+ 安全起见,请务必在事务开启之后,再使用 ForUpdate
+
+
+
+
+ 不能为 null
+
+
+
+
+ {name} 不能为 null
+
+
+
+
+ 无法匹配 {property}
+
+
+
+
+ {property} 无法解析为表达式树
+
+
+
+
+ 参数 masterConnectionString 不可为空,请检查 UseConnectionString
+
+
+
+
+ 提交
+
+
+
+
+ 连接失败,准备切换其他可用服务器
+
+
+
+
+ 自定义表达式解析错误:类型 {exp3MethodDeclaringType} 需要定义 static ThreadLocal<ExpressionCallContext> 字段、字段、字段(重要三次提醒)
+
+
+
+
+ Custom { 反射信息 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
+
+
+
+
+ Custom { 静态方法名 }不能为空,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
+
+
+
+
+ Custom 对应的{{ 静态方法名 }}:{fiValueCustomArray} 未设置 [DynamicFilterCustomAttribute] 特性
+
+
+
+
+ Custom 要求 Field 应该空格分割,并且长度为 2,格式:{ 静态方法名 }{ 空格 }{ 反射信息 }
+
+
+
+
+ 操作的数据类型({dataDisplayCsharp}) 与 AsType({tableTypeDisplayCsharp}) 不一致,请检查。
+
+
+
+
+ DateRange 要求 Value 应该逗号分割,并且长度为 2
+
+
+
+
+ DateRange 要求 Value[1] 格式必须为:yyyy、yyyy-MM、yyyy-MM-dd、yyyy-MM-dd HH、yyyy、yyyy-MM-dd HH:mm
+
+
+
+
+ 记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{sourceCount},影响的行数{affrows}。
+
+
+
+
+ SlaveConnectionString 数量与 SlaveWeights 不相同
+
+
+
+
+ ColumnAttribute.Name {colattrName} 重复存在,请检查(注意:不区分大小写)
+
+
+
+
+ 属性名 {pName} 重复存在,请检查(注意:不区分大小写)
+
+
+
+
+ {function} 功能要求实体类 {tableCsName} 必须有主键
+
+
+
+
+ {tbTypeFullName} 是父子关系,但是 MySql 8.0 以下版本中不支持组合多主键
+
+
+
+
+ {tbTypeFullName} 不是父子关系,无法使用该功能
+
+
+
+
+ 这个特别的子查询不能解析
+
+
+
+
+ 表达式错误,它的顶级对象不是 ParameterExpression:{exp}
+
+
+
+
+ 表达式错误,它不是连续的 MemberAccess 类型:{exp}
+
+
+
+
+ ExpressionTree 转换类型错误,值({value}),类型({valueTypeFullName}),目标类型({typeFullName}),{exMessage}
+
+
+
+
+ 未能解析分表字段值 {sqlWhere}
+
+
+
+
+ AsTable 未实现的功能 {asTable}
+
+
+
+
+ GBase 暂时不支持逗号以外的分割符
+
+
+
+
+ tableName:{tableName} 生成了相同的分表名
+
+
+
+
+ GetPrimarys 传递的参数 "{primary}" 不正确,它不属于字典数据的键名
+
+
+
+
+ 已经指定了 {first},不能再指定 {second}
+
+
+
+
+ {tb2DbName}.{mp2MemberName} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public
+
+
+
+
+ Include 参数类型错误
+
+
+
+
+ Include 参数类型错误,集合属性请使用 IncludeMany
+
+
+
+
+ Include 参数类型错误,表达式类型应该为 MemberAccess
+
+
+
+
+ IncludeMany 类型 {tbTypeDisplayCsharp} 的属性 {collMemMemberName} 不是有效的导航属性,提示:IsIgnore = true 不会成为导航属性
+
+
+
+
+ IncludeMany {navigateSelector} 参数错误,Select 只可以使用一个参数的方法,正确格式:.Select(t =>new TNavigate {{}})
+
+
+
+
+ IncludeMany {navigateSelector} 参数错误,Select lambda参数返回值必须和 {collMemElementType} 类型一致
+
+
+
+
+ IncludeMany 参数1 类型错误,表达式类型应该为 MemberAccess
+
+
+
+
+ IncludeMany {navigateSelector} 参数类型错误,正确格式: a.collections.Take(1).Where(c =>c.aid == a.id).Select(a=> new TNavigate{{}})
+
+
+
+
+ ISelect.InsertInto() 未选择属性: {displayCsharp}
+
+
+
+
+ ISelect.InsertInto() 类型错误: {displayCsharp}
+
+
+
+
+ InsertOrUpdate 功能执行 merge into 要求实体类 {CsName} 必须有主键
+
+
+
+
+ InsertOrUpdate<>的泛型参数 不支持 {typeofT1},请传递您的实体类
+
+
+
+
+ 【延时加载】功能需要安装 FreeSql.Extensions.LazyLoading.dll,可前往 nuget 下载
+
+
+
+
+ 【延时加载】{trytbTypeName} 编译错误:{exMessage}\r\n\r\n{cscode}
+
+
+
+
+ 【延时加载】实体类型 {trytbTypeName} 必须声明为 public
+
+
+
+
+ ManyToMany 导航属性 .AsSelect() 暂时不可用于 Sum/Avg/Max/Min/First/ToOne/ToList 方法
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbmidCsName} 中没有找到对应的字段,如:{midTypePropsTrytbName}{findtrytbPkCsName}、{midTypePropsTrytbName}_{findtrytbPkCsName}
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 缺少主键标识,[Column(IsPrimary = true)]
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {tbrefTypeName} 必须存在对应的 [Navigate(ManyToMany = x)] 集合属性
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{tbmidCsName}.{trycolCsName} 和 {trytbCsName}.{trytbPrimarysCsName} 类型不一致
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 错误:{exMessage}
+
+
+
+
+ 【ManyToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,中间类 {tbmidCsName}.{midTypePropsTrytbName} 导航属性不是【ManyToOne】或【OneToOne】
+
+
+
+
+ 映射异常:{name} 没有一个属性名相同
+
+
+
+
+ Ado.MasterPool 值为 null,该操作无法自启用事务,请显式传递【事务对象】解决
+
+
+
+
+ 缺少 FreeSql 数据库实现包:FreeSql.Provider.{Provider}.dll,可前往 nuget 下载
+
+
+
+
+ 缺少 FreeSql 数据库实现包:{dll},可前往 nuget 下载;如果存在 {dll} 依然报错(原因是环境问题导致反射不到类型),请在 UseConnectionString/UseConnectionFactory 第三个参数手工传入 typeof({providerType})
+
+
+
+
+ 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] Bind 数目({bindColumnsCount}) 与 外部主键数目({tbrefPrimarysLength}) 不相同
+
+
+
+
+ {tb2DbName}.{mp2MemberName} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2MemberName}) 中使用,请移步参考 IncludeMany 文档。
+
+
+
+
+ 【导航属性】{trytbTypeDisplayCsharp}.{pName} 缺少 set 属性
+
+
+
+
+ 导航属性 {trytbTypeName}.{pnvName} 没有找到对应的字段,如:{pnvName}{findtbrefPkCsName}、{pnvName}_{findtbrefPkCsName}。或者使用 [Navigate] 特性指定关系映射。
+
+
+
+
+ 导航属性 {trytbTypeName}.{pnvName} 解析错误,实体类型 {trytcTypeName} 缺少主键标识,[Column(IsPrimary = true)]
+
+
+
+
+ 导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trycolCsName} 和 {tbrefCsName}.{tbrefPrimarysCsName} 类型不一致
+
+
+
+
+ 导航属性 {trytbTypeName}.{pnvName} 特性 [Navigate] 解析错误,在 {tbrefTypeName} 未找到属性:{bi}
+
+
+
+
+ {tableTypeDisplayCsharp} 没有定义主键,无法使用 SetSource,请尝试 SetDto 或者 SetSource 指定临时主键
+
+
+
+
+ 没有定义属性
+
+
+
+
+ 未实现
+
+
+
+
+ 未实现函数表达式 {exp} 解析
+
+
+
+
+ 未实现函数表达式 {exp} 解析,参数 {expArguments} 必须为常量
+
+
+
+
+ 未实现函数表达式 {exp} 解析,如果正在操作导航属性集合,请使用 .AsSelect().{exp3MethodName}({exp3ArgumentsCount})
+
+
+
+
+ 未实现 MemberAccess 下的 Constant
+
+
+
+
+ 未实现 {name}
+
+
+
+
+ 不支持
+
+
+
+
+ {dataType} 不支持 OrderByRandom 随机排序
+
+
+
+
+ {property} 不是有效的导航属性
+
+
+
+
+ {dbName} 找不到列 {memberName}
+
+
+
+
+ 找不到 {CsName} 对应的列
+
+
+
+
+ 找不到属性:{memberName}
+
+
+
+
+ 找不到属性名 {proto}
+
+
+
+
+ Custom 找不到对应的{{ 反射信息 }}:{fiValueCustomArray}
+
+
+
+
+ Custom 找不到对应的{{ 静态方法名 }}:{fiValueCustomArray}
+
+
+
+
+ [Table(AsTable = xx)] 设置的属性名 {atmGroupsValue} 不存在
+
+
+
+
+ 未指定 UseConnectionString 或者 UseConnectionFactory
+
+
+
+
+ 【{policyName}】ObjectPool.{GetName}() timeout {totalSeconds} seconds, see: https://github.com/dotnetcore/FreeSql/discussions/1081
+
+
+
+
+ 【{policyName}】ObjectPool.GetAsync() The queue is too long. Policy.AsyncGetCapacity = {asyncGetCapacity}
+
+
+
+
+ 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 在 {tbrefCsName} 中没有找到对应的字段,如:{findtrytb}{findtrytbPkCsName}、{findtrytb}_{findtrytbPkCsName}
+
+
+
+
+ 【OneToMany】导航属性 {trytbTypeName}.{pnvName} 解析错误,{trytbCsName}.{trytbPrimarysCsName} 和 {tbrefCsName}.{trycolCsName} 类型不一致
+
+
+
+
+ 、{refpropName}{findtrytbPkCsName}、{refpropName}_{findtrytbPkCsName}。或者使用 [Navigate] 特性指定关系映射。
+
+
+
+
+ 参数 field 未指定
+
+
+
+
+ {property} 参数错误,它不是集合属性,必须为 IList<T> 或者 ICollection<T>
+
+
+
+
+ {property} 参数错误,它不是有效的导航属性
+
+
+
+
+ {where} 参数错误,{keyval} 不是有效的属性名,在实体类 {reftbTypeDisplayCsharp} 无法找到
+
+
+
+
+ {property} 参数错误,格式 "TopicId=Id,多组使用逗号连接"
+
+
+
+
+ 解析失败 {callExpMethodName} {message}
+
+
+
+
+ 【{policyName}】The ObjectPool has been disposed, see: https://github.com/dotnetcore/FreeSql/discussions/1079
+
+
+
+
+ 【{policyName}】状态不可用,等待后台检查程序恢复方可使用。{UnavailableExceptionMessage}
+
+
+
+
+ 属性{trytbVersionColumnCsName} 被标注为行锁(乐观锁)(IsVersion),但其必须为数字类型 或者 byte[] 或者 string,并且不可为 Nullable
+
+
+
+
+ properties 参数不能为空
+
+
+
+
+ {property} 属性名无法找到
+
+
+
+
+ Range 要求 Value 应该逗号分割,并且长度为 2
+
+
+
+
+ 回滚
+
+
+
+
+ 运行时错误,反射获取 IncludeMany 方法失败
+
+
+
+
+ 蛋疼的 Access 插入只能一条一条执行,不支持 values(..),(..) 也不支持 select .. UNION ALL select ..
+
+
+
+
+ BaseEntity.Initialization 初始化错误,获取到 IFreeSql 是 null
+
+
+
+
+ 【{thisName}】Block access and wait for recovery: {exMessage}
+
+
+
+
+ 无法将 IQueryable<{typeofName}> 转换为 ISelect<{typeofName}>,因为他的实现不是 FreeSql.Extensions.Linq.QueryableProvider
+
+
+
+
+ 连接字符串错误
+
+
+
+
+ 【{thisName}】连接字符串错误,请检查。
+
+
+
+
+ 连接字符串错误,或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台
+
+
+
+
+ 【{thisName}】连接字符串错误,请检查。或者检查项目属性 > 生成 > 目标平台:x86 | x64,或者改用 FreeSql.Provider.SqliteCore 访问 arm 平台
+
+
+
+
+ FreeSql.Provider.CustomAdapter 无法使用 CreateCommand
+
+
+
+
+ FreeSql.Provider.CustomAdapter 仅支持 UseConnectionFactory 方式构建 IFreeSql
+
+
+
+
+ 达梦 CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
+
+
+
+
+ -DB 参数错误,未提供 ConnectionString
+
+
+
+
+ -DB 参数错误,格式为:MySql,ConnectionString
+
+
+
+
+ -DB 参数错误,不支持的类型:"{dbargs}"
+
+
+
+
+ {method} 是 FreeSql.Provider.{provider} 特有的功能
+
+
+
+
+ fsql.InsertOrUpdate Sqlite 无法完成 UpdateColumns 操作
+
+
+
+
+ 主库
+
+
+
+
+ MygisGeometry.Parse 未实现 "{wkt}"
+
+
+
+
+ -NameOptions 参数错误,格式为:0,0,0,0
+
+
+
+
+ 未实现该功能
+
+
+
+
+ 未实现错误,请反馈给作者
+
+
+
+
+ 找不到 {name}
+
+
+
+
+ FreeSql.Provider.{providerName} 未实现 Skip/Offset 功能,如果需要分页请使用判断上一次 id
+
+
+
+
+ 对象池
+
+
+
+
+ 旧表(OldName):{tboldname} 存在,数据库已存在 {tbname} 表,无法改名
+
+
+
+
+ OnConflictDoUpdate 功能要求实体类必须设置 IsPrimary 属性
+
+
+
+
+ Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname}
+
+
+
+
+ 解析失败 {callExpMethodName} {message},提示:可以使用扩展方法 IQueryable.RestoreToSelect() 还原为 ISelect 再查询
+
+
+
+
+ fsql.InsertOrUpdate + IfExistsDoNothing + {providerName}要求实体类 {tableCsName} 必须有主键
+
+
+
+
+ SelectMany 错误的类型:{typeFullName}
+
+
+
+
+ 从库
+
+
+
+
+ 类型 {objentityTypeFullName} 不可迁移
+
+
+
+
+ 类型 {objentityTypeFullName} 不可迁移,可迁移属性0个
+
+
+
+
+ 未实现 {columnDbTypeTextFull} 类型映射
+
+
+
+
+ 错误的参数设置:{args}
+
+
+
+
+ {qoteSql} is NULL,除非设置特性 [Column(IsNullable = false)]
+
+
+
+
+ 分表字段值 "{dt}" 不能小于 "{beginTime} "
+
+
+
+
+ 分表字段值不能为 null
+
+
+
+
+ 分表字段值 "{columnValue}" 不能转化成 DateTime
+
+
+
+
+ 分表字段值 "{dt}" 未匹配到分表名
+
+
+
+
+ T2 类型错误
+
+
+
+
+ tableName 格式错误,示例:“log_{yyyyMMdd}”
+
+
+
+
+ {Type}.AsType 参数错误,请传入正确的实体类型
+
+
+
+
+ {thatFullName} 类型无法访问构造函数
+
+
+
+
+ {name} 类型错误
+
+
+
+
+ {Type}.AsType 参数不支持指定为 object
+
+
+
+
+ 类型 {typeofFullName} 错误,不能使用 IncludeMany
+
+
+
+
+ 无法解析表达式:{exp}
+
+
+
+
+ 无法解析表达式方法 {exp3tmpCallMethodName}
+
+
+
+
+ 请使用 fsql.InsertDict(dict) 方法插入字典数据
+
+
+
+
+ C#: that >= between && that <= and
+ SQL: that BETWEEN between AND and
+
+
+
+
+
+
+
+
+ 注意:这个方法和 Between 有细微区别
+ C#: that >= start && that < end
+ SQL: that >= start and that < end
+
+
+
+
+
+
+
+
+ 获取 Type 的原始 c# 文本表示
+
+
+
+
+
+
+
+ 测量两个经纬度的距离,返回单位:米
+
+ 经纬坐标1
+ 经纬坐标2
+ 返回距离(单位:米)
+
+
+
+ 将 IEnumable<T> 转成 ISelect<T>,以便使用 FreeSql 的查询功能。此方法用于 Lambda 表达式中,快速进行集合导航的查询。
+
+
+
+
+
+
+
+ 多表查询
+
+
+
+
+
+ 本方法实现从已知的内存 List 数据,进行和 ISelect.IncludeMany 相同功能的贪婪加载
+ 示例:new List<Song>(new[] { song1, song2, song3 }).IncludeMany(fsql, a => a.Tags);
+ 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
+
+
+
+
+
+ 选择一个集合的导航属性,如: .IncludeMany(a => a.Tags)
+ 可以 .Where 设置临时的关系映射,如: .IncludeMany(a => a.Tags.Where(tag => tag.TypeId == a.Id))
+ 可以 .Take(5) 每个子集合只取5条,如: .IncludeMany(a => a.Tags.Take(5))
+ 可以 .Select 设置只查询部分字段,如: (a => new TNavigate { Title = a.Title })
+
+ 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?)
+
+
+
+
+ 本方法实现从已知的内存 List 数据,进行和 ISelect.IncludeMany/Include 相同功能的贪婪加载
+ 集合:new List<Song>(new[] { song1, song2, song3 }).IncludeByPropertyName(fsql, "Tags", "ParentId=Id", 5, "Id,Name");
+ 普通:new List<Song>(new[] { song1, song2, song3 }).IncludeByPropertyName(fsql, "Catetory");
+ ---普通属性 where/take/select 参数将无效
+ 文档:https://github.com/dotnetcore/FreeSql/wiki/%E8%B4%AA%E5%A9%AA%E5%8A%A0%E8%BD%BD
+
+
+
+
+ 选择一个集合或普通属性
+ 设置临时的子集合关系映射,格式:子类属性=T1属性,多组以逗号分割
+ 设置子集合只取条数
+ 设置子集合只查询部分字段
+
+
+
+
+
+ 查询数据,加工为树型 List 返回
+ 注意:实体需要配置父子导航属性
+
+
+
+
+
+
+
+ 使用递归 CTE 查询树型的所有子记录,或者所有父记录。
+ 通过测试的数据库:MySql8.0、SqlServer、PostgreSQL、Oracle、Sqlite、Firebird、达梦、人大金仓、翰高
+ 返回隐藏字段:.ToList(a => new { item = a, level = "a.cte_level", path = "a.cte_path" })
+ * v2.0.0 兼容 MySql5.6 向上或向下查询,但不支持 pathSelector/pathSeparator 详细:https://github.com/dotnetcore/FreeSql/issues/536
+
+
+
+ false(默认):由父级向子级的递归查询true:由子级向父级的递归查询
+ 路径内容选择
+ 连接路径内容
+ 递归层级
+
+
+
+
+ 随机排序
+ 支持:MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/金仓/神通
+ 不支持:MsAcess
+
+
+
+
+
+ 插入数据字典 Dictionary<string, object>
+
+
+
+
+
+
+ 插入数据字典,传入 Dictionary<string, object> 集合
+
+
+
+
+
+
+ 更新数据字典 Dictionary<string, object>
+
+
+
+
+
+
+ 更新数据字典,传入 Dictionary<string, object> 集合
+
+
+
+
+
+
+ 插入或更新数据字典,此功能依赖数据库特性(低版本可能不支持),参考如下:
+ MySql 5.6+: on duplicate key update
+ PostgreSQL 9.4+: on conflict do update
+ SqlServer 2008+: merge into
+ Oracle 11+: merge into
+ Sqlite: replace into
+ 达梦: merge into
+ 人大金仓:on conflict do update
+ 神通:merge into
+ MsAccess:不支持
+
+
+
+
+
+
+ 删除数据字典 Dictionary<string, object>
+
+
+
+
+
+
+ 删除数据字典,传入 Dictionary<string, object> 集合
+
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 生成类似Mongodb的ObjectId有序、不重复Guid
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
+ MySql 5.6+: on duplicate key update
+ PostgreSQL 9.4+: on conflict do update
+ SqlServer 2008+: merge into
+ Oracle 11+: merge into
+ Sqlite: replace into
+ 达梦: merge into
+ 人大金仓:on conflict do update
+ 神通:merge into
+ MsAccess:不支持
+ 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
+
+
+
+
+
+
+ 修改数据
+
+
+
+
+
+
+ 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 查询数据
+
+
+
+
+
+
+ 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 删除数据
+
+
+
+
+
+
+ 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 开启事务(不支持异步)
+ v1.5.0 关闭了线程事务超时自动提交的机制
+
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+ v1.5.0 关闭了线程事务超时自动提交的机制
+
+
+ 事务体 () => {}
+
+
+
+ 数据库访问对象
+
+
+
+
+ 所有拦截方法都在这里
+
+
+
+
+ CodeFirst 模式开发相关方法
+
+
+
+
+ DbFirst 模式开发相关方法
+
+
+
+
+ 全局过滤设置,可默认附加为 Select/Update/Delete 条件
+
+
+
+
+ em.Boolean,System.Linq.Expressions.Expression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 生成类似Mongodb的ObjectId有序、不重复Guid
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:
+ MySql 5.6+: on duplicate key update
+ PostgreSQL 9.4+: on conflict do update
+ SqlServer 2008+: merge into
+ Oracle 11+: merge into
+ Sqlite: replace into
+ 达梦: merge into
+ 人大金仓:on conflict do update
+ 神通:merge into
+ MsAccess:不支持
+ 注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
+
+
+
+
+
+
+ 修改数据
+
+
+
+
+
+
+ 修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 查询数据
+
+
+
+
+
+
+ 查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 删除数据
+
+
+
+
+
+
+ 删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 开启事务(不支持异步)
+ v1.5.0 关闭了线程事务超时自动提交的机制
+
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+ v1.5.0 关闭了线程事务超时自动提交的机制
+
+
+ 事务体 () => {}
+
+
+
+ 数据库访问对象
+
+
+
+
+ 所有拦截方法都在这里
+
+
+
+
+ CodeFirst 模式开发相关方法
+
+
+
+
+ DbFirst 模式开发相关方法
+
+
+
+
+ 全局过滤设置,可默认附加为 Select/Update/Delete 条件
+
+
+
+
diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj
index f84e3ead..5e3432c2 100644
--- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj
+++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj
@@ -19,7 +19,7 @@
False
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj
index 75ab944c..8f7e4fe8 100644
--- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj
+++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj
index 93ba2532..8894cad3 100644
--- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj
+++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj
@@ -15,7 +15,7 @@
$(AssemblyName)
true
true
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj
index 499c9af5..44bfae6f 100644
--- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj
+++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj
index 20c4105b..617fea34 100644
--- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj
+++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj
index de56bd89..b6d1c25c 100644
--- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj
+++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj
@@ -15,7 +15,7 @@
$(AssemblyName)
true
true
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj
index b8b9bf23..a35622ea 100644
--- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj
+++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
index b49cbfcb..643ff7b9 100644
--- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
+++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj
index 833df370..ac265e94 100644
--- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj
+++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj
index 1b2f0f52..033bad42 100644
--- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj
+++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
index 0e87a15d..e05f03bb 100644
--- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
+++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj
index 29d9a9da..4280b2d0 100644
--- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj
+++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj
index 9040d735..1b9b87a9 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj
+++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj
index a0ab7a5d..23cd2064 100644
--- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj
+++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj
index 8e7a6f97..68e10d7f 100644
--- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj
+++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj
@@ -15,7 +15,7 @@
$(AssemblyName)
true
true
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
index 0dd97341..bb9b16fc 100644
--- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
+++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
@@ -18,7 +18,7 @@
true
false
key.snk
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj
index 3eecf135..737adebd 100644
--- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj
+++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
index d79af693..6609d420 100644
--- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
+++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305
diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
index ec20ddc8..c302bfe8 100644
--- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
+++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
@@ -18,7 +18,7 @@
true
key.snk
false
- 3.2.691-preview20230303
+ 3.2.691-preview20230305