diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index dedde15f..f59890cb 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -13,6 +13,10 @@ namespace FreeSql { internal DbContextScopedFreeSql _ormScoped; internal IFreeSql OrmOriginal => _ormScoped?._originalFsql ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql"); + + /// + /// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction + /// public IFreeSql Orm => _ormScoped ?? throw new ArgumentNullException("请在 OnConfiguring 或 AddFreeDbContext 中配置 UseFreeSql"); #region Property UnitOfWork diff --git a/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs index adeaab0d..28b429c8 100644 --- a/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs +++ b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs @@ -1,8 +1,12 @@ using FreeSql; using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; +using FreeSql.Internal.Model; +using FreeSql.Internal.ObjectPool; using System; using System.Collections.Generic; using System.Data; +using System.Data.Common; using System.Text; namespace FreeSql @@ -18,11 +22,39 @@ namespace FreeSql { if (fsql == null) return null; var scopedfsql = fsql as DbContextScopedFreeSql; - if (scopedfsql == null) return new DbContextScopedFreeSql { _originalFsql = fsql, _resolveDbContext = resolveDbContext, _resolveUnitOfWork = resolveUnitOfWork }; + if (scopedfsql == null) + return new DbContextScopedFreeSql + { + _originalFsql = fsql, + _resolveDbContext = resolveDbContext, + _resolveUnitOfWork = resolveUnitOfWork, + Ado = new ScopeTransactionAdo(fsql.Ado as AdoProvider, () => + { + var db = resolveDbContext?.Invoke(); + db?.FlushCommand(); + return resolveUnitOfWork?.Invoke()?.GetOrBeginTransaction(); + }) + }; return Create(scopedfsql._originalFsql, resolveDbContext, resolveUnitOfWork); } - public IAdo Ado => _originalFsql.Ado; + class ScopeTransactionAdo : AdoProvider + { + AdoProvider _ado; + public ScopeTransactionAdo(AdoProvider ado, Func resolveTran) : base(ado.DataType, null, null) + { + _ado = ado; + base.ResolveTransaction = resolveTran; + base.ConnectionString = ado.ConnectionString; + base.SlaveConnectionStrings = ado.SlaveConnectionStrings; + base.Identifier = ado.Identifier; + } + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) => _ado.AddslashesProcessParam(param, mapType, mapColumn); + public override DbCommand CreateCommand() => _ado.CreateCommand(); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _ado.GetDbParamtersByObject(sql, obj); + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) => _ado.ReturnConnection(pool, conn, ex); + } + public IAdo Ado { get; private set; } public IAop Aop => _originalFsql.Aop; public ICodeFirst CodeFirst => _originalFsql.CodeFirst; public IDbFirst DbFirst => _originalFsql.DbFirst; diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index e4208f1f..02eb0609 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -4,6 +4,11 @@ FreeSql.DbContext + + + 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与 DbContext 事务保持一致,可省略传递 WithTransaction + + 添加 @@ -343,6 +348,11 @@ 工作单元 + + + 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与工作单元事务保持一致,可省略传递 WithTransaction + + 开启事务,或者返回已开启的事务 @@ -502,14 +512,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs index 2e9a53be..7f0565cd 100644 --- a/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs +++ b/FreeSql.DbContext/UnitOfWork/IUnitOfWork.cs @@ -10,6 +10,9 @@ namespace FreeSql /// public interface IUnitOfWork : IDisposable { + /// + /// 该对象 Select/Delete/Insert/Update/InsertOrUpdate 与工作单元事务保持一致,可省略传递 WithTransaction + /// IFreeSql Orm { get; } /// diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs index a0a28791..6ec35c54 100644 --- a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs +++ b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs @@ -130,6 +130,7 @@ namespace FreeSql.Tests flowRepos = uow.GetRepository(); flowRepos.Insert(flow); flowRepos.Orm.Select().ToList(); + flowRepos.Orm.Ado.ExecuteConnectTest(); uow.Commit(); } } diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index f5d2d1db..a06a844f 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -3089,177 +3089,6 @@ - - - 测试数据库是否连接正确,本方法执行如下命令: - 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> - - - - - - - - 可自定义解析表达式 @@ -4088,12 +3917,6 @@ 超时 - - - 获取资源 - - - 使用完毕后,归还资源 @@ -4164,12 +3987,6 @@ 资源对象 - - - 从对象池获取对象成功的时候触发,通过该方法统计或初始化对象 - - 资源对象 - 归还对象给对象池的时候触发 diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 3ed9be74..6bffc242 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -17,7 +17,7 @@ namespace FreeSql.Internal.CommonProvider public abstract partial class AdoProvider : IAdo, IDisposable { - protected abstract void ReturnConnection(IObjectPool pool, Object conn, Exception ex); + public abstract void ReturnConnection(IObjectPool pool, Object conn, Exception ex); public abstract DbCommand CreateCommand(); public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); public DbParameter[] GetDbParamtersByObject(object obj) => GetDbParamtersByObject("*", obj); @@ -27,14 +27,15 @@ namespace FreeSql.Internal.CommonProvider public IObjectPool MasterPool { get; protected set; } public List> SlavePools { get; } = new List>(); public DataType DataType { get; } - public string ConnectionString { get; } - public string[] SlaveConnectionStrings { get; } - public Guid Identifier { get; } + public string ConnectionString { get; protected set; } + public string[] SlaveConnectionStrings { get; protected set; } + public Guid Identifier { get; protected set; } protected CommonUtils _util { get; set; } protected int slaveUnavailables = 0; private object slaveLock = new object(); private Random slaveRandom = new Random(); + protected Func ResolveTransaction; public AdoProvider(DataType dataType, string connectionString, string[] slaveConnectionStrings) { @@ -876,7 +877,7 @@ namespace FreeSql.Internal.CommonProvider if (connection == null) { - var tran = transaction ?? TransactionCurrentThread; + var tran = transaction ?? ResolveTransaction?.Invoke() ?? TransactionCurrentThread; if (tran != null && connection == null) { cmd.Connection = tran.Connection; diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index 8421208a..bfb147d2 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -782,7 +782,7 @@ namespace FreeSql.Internal.CommonProvider if (connection == null) { - var tran = transaction; + var tran = transaction ?? ResolveTransaction?.Invoke(); if (tran != null) { diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index 64634235..b49c2a8a 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -65,7 +65,7 @@ namespace FreeSql.Dameng return new DmCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as DamengConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index 63e06ea5..1c323bd9 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -96,7 +96,7 @@ namespace FreeSql.Firebird return new FbCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as FirebirdConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index cad591ac..459eb34b 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -66,7 +66,7 @@ namespace FreeSql.KingbaseES return new KdbndpCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as KingbaseESConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index 1f69bec9..16f3c32c 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -70,7 +70,7 @@ namespace FreeSql.MsAccess return new OleDbCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as MsAccessConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 66f62f8e..bacef5e6 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -72,7 +72,7 @@ namespace FreeSql.MySql return new MySqlCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as MySqlConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs index 56ea4ebd..e1b0b19e 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs @@ -66,7 +66,7 @@ namespace FreeSql.Odbc.Dameng return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcDamengConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index bda2426b..91281364 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -67,7 +67,7 @@ namespace FreeSql.Odbc.Default return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs index 94b9bda8..f9773484 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs @@ -66,7 +66,7 @@ namespace FreeSql.Odbc.KingbaseES return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcKingbaseESConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 0c18f7b7..33c32a63 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -66,7 +66,7 @@ namespace FreeSql.Odbc.MySql return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcMySqlConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index 4e81bef1..cfdf8917 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -66,7 +66,7 @@ namespace FreeSql.Odbc.Oracle return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcOracleConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index e8f0c53e..27ef0721 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -67,7 +67,7 @@ namespace FreeSql.Odbc.PostgreSQL return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcPostgreSQLConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index 73ad461f..e0a567a4 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -80,7 +80,7 @@ namespace FreeSql.Odbc.SqlServer return new OdbcCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OdbcSqlServerConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index 57d161e0..7279eb7a 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -68,7 +68,7 @@ namespace FreeSql.Oracle return cmd; } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as OracleConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 857ca688..931ad21a 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -84,7 +84,7 @@ namespace FreeSql.PostgreSQL return new NpgsqlCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as PostgreSQLConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index 33da3ebd..0fa64c97 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -67,7 +67,7 @@ namespace FreeSql.ShenTong return new OscarCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as ShenTongConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index 9266c037..40423ef5 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -94,7 +94,7 @@ namespace FreeSql.SqlServer return new SqlCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as SqlServerConnectionPool; if (rawPool != null) rawPool.Return(conn, ex); diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index a911d9b1..a573432f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -75,7 +75,7 @@ namespace FreeSql.Sqlite return new SQLiteCommand(); } - protected override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) + public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) { var rawPool = pool as SqliteConnectionPool; if (rawPool != null) rawPool.Return(conn, ex);