From 117ef11274a1f2c591b6a5dc49af6c68351a96a4 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Thu, 11 Jun 2020 18:21:18 +0800
Subject: [PATCH] optimize AdoProvider.Dispose
---
FreeSql/FreeSql.xml | 312 ++++++++++--------
.../AdoProvider/AdoProviderTransaction.cs | 12 +-
2 files changed, 175 insertions(+), 149 deletions(-)
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index 7f3b7221..01940f0f 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -2417,137 +2417,6 @@
-
-
- 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
-
-
-
-
-
-
-
-
- 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
- 查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
-
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
- 查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
-
-
-
-
-
-
-
- 查询
-
-
-
-
-
-
- 查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
-
-
-
-
-
-
-
- 在【主库】执行
-
-
-
-
-
-
-
- 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
-
-
-
-
-
-
-
- 在【主库】执行
-
-
-
-
-
-
-
- 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
-
-
-
-
-
-
-
- 执行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 })
-
-
-
-
-
-
-
-
- 执行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 })
-
-
-
-
-
-
可自定义解析表达式
@@ -3194,12 +3063,6 @@
超时
-
-
- 获取资源
-
-
-
使用完毕后,归还资源
@@ -3270,12 +3133,6 @@
资源对象
-
-
- 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
-
- 资源对象
-
归还对象给对象池的时候触发
@@ -3917,3 +3774,172 @@
+xpression{System.Func{``0,``1,``2,``3,``4,System.Boolean}})">
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+ true 时生效
+
+
+
+
+ 生成类似Mongodb的ObjectId有序、不重复Guid
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入或更新数据
+ MySql: on duplicate key update
+ PostgreSQL: on conflict do update
+ SqlServer: merge into
+ Oracle: merge into
+ Sqlite: replace into
+ Dameng: merge into
+ 注意:还可以使用 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/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
index 41c4f539..42966cc7 100644
--- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
+++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
@@ -132,8 +132,8 @@ namespace FreeSql.Internal.CommonProvider
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
- var trans = _trans.Values.ToArray();
- foreach (var tran in trans) CommitTransaction(false, tran, null, "Dispose自动提交");
+ var trans = _trans?.Values.ToArray();
+ if (trans != null) foreach (var tran in trans) CommitTransaction(false, tran, null, "Dispose自动提交");
}
catch { }
@@ -142,8 +142,8 @@ namespace FreeSql.Internal.CommonProvider
{
try
{
- pools = SlavePools.ToArray();
- SlavePools.Clear();
+ pools = SlavePools?.ToArray();
+ SlavePools?.Clear();
break;
}
catch
@@ -154,10 +154,10 @@ namespace FreeSql.Internal.CommonProvider
{
foreach (var pool in pools)
{
- try { pool.Dispose(); } catch { }
+ try { pool?.Dispose(); } catch { }
}
}
- try { MasterPool.Dispose(); } catch { }
+ try { MasterPool?.Dispose(); } catch { }
}
}
}
\ No newline at end of file