From 403b10ba94ec39dfb4b0f672bf1e7c891fb0ceeb Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Thu, 2 Jun 2022 12:24:17 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20ObservableCollection?=
=?UTF-8?q?=20=E7=BA=A7=E8=81=94=E5=8A=A0=E8=BD=BD=E5=92=8C=E4=BF=9D?=
=?UTF-8?q?=E5=AD=98=EF=BC=9B-=20=E4=BF=AE=E5=A4=8D=20=E8=BE=BE=E6=A2=A6?=
=?UTF-8?q?=20min=20pool=20size=20=E9=A2=84=E7=83=AD=E6=95=B0=E9=87=8F?=
=?UTF-8?q?=E5=8C=B9=E9=85=8D=20bug=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Directory.Build.props | 2 +-
Examples/base_entity/Program.cs | 2 ++
Examples/base_entity/base_entity.csproj | 8 ++++-
FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++++++
.../Sqlite/Curd/SqliteSelectTest.cs | 3 +-
FreeSql/Internal/CommonExpression.cs | 7 ++++-
.../SelectProvider/Select1Provider.cs | 25 ++++++++-------
.../ClickHouseAdo/ClickHouseConnectionPool.cs | 31 +++++++------------
.../DamengAdo/DamengConnectionPool.cs | 23 +++++++-------
.../FirebirdAdo/FirebirdConnectionPool.cs | 21 +++++++------
.../GBaseAdo/GBaseConnectionPool.cs | 21 +++++++------
.../KingbaseESAdo/KingbaseESConnectionPool.cs | 23 +++++++-------
.../MsAccessAdo/MsAccessConnectionPool.cs | 23 +++++++-------
.../MySqlAdo/MySqlConnectionPool.cs | 25 ++++++++-------
.../OdbcDamengAdo/OdbcDamengConnectionPool.cs | 23 +++++++-------
.../Default/OdbcAdo/OdbcConnectionPool.cs | 23 +++++++-------
.../OdbcKingbaseESConnectionPool.cs | 23 +++++++-------
.../OdbcMySqlAdo/OdbcMySqlConnectionPool.cs | 21 +++++++------
.../OdbcOracleAdo/OdbcOracleConnectionPool.cs | 23 +++++++-------
.../OdbcPostgreSQLConnectionPool.cs | 23 +++++++-------
.../OdbcSqlServerConnectionPool.cs | 23 +++++++-------
.../OracleAdo/OracleConnectionPool.cs | 27 ++++++++--------
.../PostgreSQLAdo/PostgreSQLConnectionPool.cs | 23 +++++++-------
.../ShenTongAdo/ShenTongConnectionPool.cs | 23 +++++++-------
.../SqlServerAdo/SqlServerConnectionPool.cs | 28 ++++++++---------
.../SqliteAdo/SqliteConnectionPool.cs | 27 ++++++++--------
26 files changed, 272 insertions(+), 238 deletions(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index b403c301..606f0874 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -9,7 +9,7 @@
- 3.2.661
+ 3.2.666-preview202200601
diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs
index 93e33c56..59d4b7df 100644
--- a/Examples/base_entity/Program.cs
+++ b/Examples/base_entity/Program.cs
@@ -283,6 +283,8 @@ namespace base_entity
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
+ .UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user id=2user;password=123456789;database=2user;poolsize=5;min pool size=1")
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
//.UseConnectionString(FreeSql.DataType.OdbcMySql, "Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Persist Security Info=False;Trusted_Connection=Yes;UID=root;PWD=root;DATABASE=cccddd_odbc;Charset=utf8;SslMode=none;Max pool size=2")
diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj
index 6f286bbd..607454c4 100644
--- a/Examples/base_entity/base_entity.csproj
+++ b/Examples/base_entity/base_entity.csproj
@@ -22,6 +22,7 @@
+
@@ -30,5 +31,10 @@
-
+
+
+
+ ..\..\Providers\FreeSql.Provider.Dameng\lib\DmProvider\netstandard2.0\DmProvider.dll
+
+
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 6b638cad..1ab5bf1c 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -795,5 +795,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
index 2e1300c0..95e009ad 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
@@ -10,6 +10,7 @@ using System.Threading.Tasks;
using System.Text;
using Xunit;
using FreeSql.Internal.CommonProvider;
+using System.Collections.ObjectModel;
namespace FreeSql.Tests.Sqlite
{
@@ -1241,7 +1242,7 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
public string m2setting { get; set; }
- public List childs { get; set; }
+ public ObservableCollection childs { get; set; }
}
public class TestInclude_OneToManyModel3
{
diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs
index 1146d0b3..ba077fc1 100644
--- a/FreeSql/Internal/CommonExpression.cs
+++ b/FreeSql/Internal/CommonExpression.cs
@@ -5,6 +5,7 @@ using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.Data.Common;
using System.Globalization;
using System.Linq;
@@ -395,7 +396,10 @@ namespace FreeSql.Internal
object ret;
if (string.IsNullOrEmpty(parent.IncludeManyKey) == false)
{
- ret = typeof(List<>).MakeGenericType(parent.CsType).CreateInstanceGetDefaultValue();
+ if (parent.MapType == typeof(ObservableCollection<>).MakeGenericType(parent.CsType))
+ ret = parent.MapType.CreateInstanceGetDefaultValue();
+ else
+ ret = typeof(List<>).MakeGenericType(parent.CsType).CreateInstanceGetDefaultValue();
fillIncludeMany?.Add(NativeTuple.Create(parent.IncludeManyKey, ret as IList, rowIndex));
}
else if (parent.SubSelectMany != null)
@@ -408,6 +412,7 @@ namespace FreeSql.Internal
else
{
var ctorParms = new object[ctorParmsLength];
+ var ctorParmsDefs = parent.Consturctor.GetParameters();
for (var c = 0; c < ctorParmsLength; c++)
ctorParms[c] = ReadAnonymous(parent.Childs[c], dr, ref index, notRead, null, rowIndex, fillIncludeMany, fillSubSelectMany);
ret = parent.Consturctor.Invoke(ctorParms);
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
index 10412d06..e28b43d1 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
@@ -671,17 +671,20 @@ namespace FreeSql.Internal.CommonProvider
var listValueExp = Expression.Parameter(typeof(List), "listValue");
var setListValue = membersExpNotNull == null ?
Expression.Lambda>>(
- Expression.Assign(
- Expression.MakeMemberAccess(membersExp, collMem.Member),
- Expression.TypeAs(listValueExp, collMem.Type)
- ), t1parm, listValueExp).Compile() :
- Expression.Lambda>>(
- Expression.IfThen(
- membersExpNotNull,
- Expression.Assign(
- Expression.MakeMemberAccess(membersExp, collMem.Member),
- Expression.TypeAs(listValueExp, collMem.Type)
- )
+ collMem.Type == typeof(ObservableCollection) ?
+ (Expression)Expression.IfThen(
+ Expression.NotEqual(listValueExp, Expression.Constant(null, typeof(List))),
+ Expression.Assign(Expression.MakeMemberAccess(membersExp, collMem.Member), Expression.New(typeof(ObservableCollection).GetConstructor(new[] { typeof(List) }), listValueExp))
+ ) :
+ Expression.Assign(Expression.MakeMemberAccess(membersExp, collMem.Member), Expression.TypeAs(listValueExp, collMem.Type))
+ , t1parm, listValueExp).Compile() :
+ Expression.Lambda>>(Expression.IfThen(membersExpNotNull,
+ collMem.Type == typeof(ObservableCollection) ?
+ (Expression)Expression.IfThen(
+ Expression.NotEqual(listValueExp, Expression.Constant(null, typeof(List))),
+ Expression.Assign(Expression.MakeMemberAccess(membersExp, collMem.Member), Expression.New(typeof(ObservableCollection).GetConstructor(new[] { typeof(List) }), listValueExp))
+ ) :
+ Expression.Assign(Expression.MakeMemberAccess(membersExp, collMem.Member), Expression.TypeAs(listValueExp, collMem.Type))
), t1parm, listValueExp).Compile();
var returnTarget = Expression.Label(typeof(object));
diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs
index 12416f36..d8c0b2a7 100644
--- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs
+++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseConnectionPool.cs
@@ -76,18 +76,17 @@ namespace FreeSql.ClickHouse
{
_connectionString = value ?? "";
- //var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- //var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- //if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
- //var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
- //PoolSize = poolsize + connStrIncr;
- //_connectionString = m.Success ?
- // Regex.Replace(_connectionString, pattern, $"Max pool size={PoolSize}", RegexOptions.IgnoreCase) :
- // $"{_connectionString};Max pool size={PoolSize}";
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
-
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success)
{
PoolSize = int.Parse(m.Groups[1].Value);
@@ -102,21 +101,13 @@ namespace FreeSql.ClickHouse
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs
index 2c43d3f8..a41283ca 100644
--- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengConnectionPool.cs
@@ -73,8 +73,17 @@ namespace FreeSql.Dameng
{
_connectionString = value ?? "";
- var pattern = @"(Max\s*)?pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"(Max\s*)?pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[2].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -91,21 +100,13 @@ namespace FreeSql.Dameng
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs
index e82713c1..dd4ff973 100644
--- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdConnectionPool.cs
@@ -64,8 +64,17 @@ namespace FreeSql.Firebird
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -81,21 +90,13 @@ namespace FreeSql.Firebird
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
index 095b8fe2..fda36444 100644
--- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
+++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
@@ -64,8 +64,17 @@ namespace FreeSql.GBase
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -81,21 +90,13 @@ namespace FreeSql.GBase
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
index 3c9b846f..e363c42e 100644
--- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
+++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
@@ -75,8 +75,17 @@ namespace FreeSql.KingbaseES
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -92,21 +101,13 @@ namespace FreeSql.KingbaseES
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
index 7283a015..54bb99c2 100644
--- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
+++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
@@ -63,8 +63,17 @@ namespace FreeSql.MsAccess
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success)
{
if (int.TryParse(m.Groups[1].Value, out var poolsize) && poolsize > 0)
@@ -80,21 +89,13 @@ namespace FreeSql.MsAccess
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
index 8bc611f0..39c70ecc 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
@@ -68,8 +68,17 @@ namespace FreeSql.MySql
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -85,21 +94,13 @@ namespace FreeSql.MySql
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
@@ -139,7 +140,7 @@ namespace FreeSql.MySql
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
@@ -169,7 +170,7 @@ namespace FreeSql.MySql
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
index 359997b9..4be0c321 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
@@ -75,8 +75,17 @@ namespace FreeSql.Odbc.Dameng
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -92,21 +101,13 @@ namespace FreeSql.Odbc.Dameng
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
index d181b087..6af2dab1 100644
--- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
@@ -64,8 +64,17 @@ namespace FreeSql.Odbc.Default
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -81,21 +90,13 @@ namespace FreeSql.Odbc.Default
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
index b8ed480e..0ffb42c1 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
@@ -75,8 +75,17 @@ namespace FreeSql.Odbc.KingbaseES
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -92,21 +101,13 @@ namespace FreeSql.Odbc.KingbaseES
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
index 114c6b44..d4c2f0eb 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
@@ -64,8 +64,17 @@ namespace FreeSql.Odbc.MySql
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -81,21 +90,13 @@ namespace FreeSql.Odbc.MySql
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
index bd0a75f9..58983b72 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
@@ -75,8 +75,17 @@ namespace FreeSql.Odbc.Oracle
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -92,21 +101,13 @@ namespace FreeSql.Odbc.Oracle
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
index 23921daa..40d06352 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
@@ -65,8 +65,17 @@ namespace FreeSql.Odbc.PostgreSQL
{
_connectionString = value ?? "";
- var pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[2].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[2].Value, out var poolsize) == false || poolsize <= 0) poolsize = 50;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -82,21 +91,13 @@ namespace FreeSql.Odbc.PostgreSQL
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[2].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
index 537b7703..752567cc 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
@@ -64,8 +64,17 @@ namespace FreeSql.Odbc.SqlServer
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -81,21 +90,13 @@ namespace FreeSql.Odbc.SqlServer
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
index 46e112a9..d29b0637 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
@@ -75,8 +75,17 @@ namespace FreeSql.Oracle
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -92,21 +101,13 @@ namespace FreeSql.Oracle
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
@@ -146,7 +147,7 @@ namespace FreeSql.Oracle
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
@@ -176,7 +177,7 @@ namespace FreeSql.Oracle
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
index dcd27704..49fef7c7 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
@@ -65,8 +65,17 @@ namespace FreeSql.PostgreSQL
{
_connectionString = value ?? "";
- var pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[2].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[2].Value, out var poolsize) == false || poolsize <= 0) poolsize = 50;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -82,21 +91,13 @@ namespace FreeSql.PostgreSQL
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[2].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
index f0ec4320..33788535 100644
--- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
+++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
@@ -63,8 +63,17 @@ namespace FreeSql.ShenTong
{
_connectionString = value ?? "";
- var pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[2].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max(imum)?\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[2].Value, out var poolsize) == false || poolsize <= 0) poolsize = 50;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -80,21 +89,13 @@ namespace FreeSql.ShenTong
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min(imum)?\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[2].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
index 2a0a0edf..849e13ab 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
@@ -68,8 +68,17 @@ namespace FreeSql.SqlServer
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success == false || int.TryParse(m.Groups[1].Value, out var poolsize) == false || poolsize <= 0) poolsize = 100;
var connStrIncr = dicConnStrIncr.AddOrUpdate(_connectionString, 1, (oldkey, oldval) => Math.Min(5, oldval + 1));
PoolSize = poolsize + connStrIncr;
@@ -85,21 +94,13 @@ namespace FreeSql.SqlServer
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
FreeSql.Internal.CommonUtils.PrevReheatConnectionPool(_pool, minPoolSize);
}
}
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.Open();
return obj.Value.Ping(true);
}
@@ -140,7 +141,7 @@ namespace FreeSql.SqlServer
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
@@ -161,7 +162,6 @@ namespace FreeSql.SqlServer
if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
{
-
try
{
await obj.Value.OpenAsync();
@@ -170,7 +170,7 @@ namespace FreeSql.SqlServer
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
index ce7e0af6..88fef4de 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
@@ -76,8 +76,17 @@ namespace FreeSql.Sqlite
{
_connectionString = value ?? "";
- var pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
- Match m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ var minPoolSize = 0;
+ var pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
+ var m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
+ if (m.Success)
+ {
+ minPoolSize = int.Parse(m.Groups[1].Value);
+ _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
+ }
+
+ pattern = @"Max\s*pool\s*size\s*=\s*(\d+)";
+ m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
if (m.Success)
{
PoolSize = int.Parse(m.Groups[1].Value);
@@ -92,15 +101,6 @@ namespace FreeSql.Sqlite
_connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
}
- var minPoolSize = 0;
- pattern = @"Min\s*pool\s*size\s*=\s*(\d+)";
- m = Regex.Match(_connectionString, pattern, RegexOptions.IgnoreCase);
- if (m.Success)
- {
- minPoolSize = int.Parse(m.Groups[1].Value);
- _connectionString = Regex.Replace(_connectionString, pattern, "", RegexOptions.IgnoreCase);
- }
-
var att = Regex.Split(_connectionString, @"Pooling\s*=\s*", RegexOptions.IgnoreCase);
if (att.Length == 2)
{
@@ -132,6 +132,7 @@ namespace FreeSql.Sqlite
public bool OnCheckAvailable(Object obj)
{
+ if (obj.Value == null) return false;
if (obj.Value.State == ConnectionState.Closed) obj.Value.OpenAndAttach(Attaches);
return obj.Value.Ping(true);
}
@@ -174,7 +175,7 @@ namespace FreeSql.Sqlite
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}
@@ -204,7 +205,7 @@ namespace FreeSql.Sqlite
{
if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
- throw ex;
+ throw;
}
}
}