From dfb4662d869c1033e6626808b29223d17c39f69c Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 14 Dec 2019 01:34:38 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=A1=A5=E5=85=85=20=E5=90=8C=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=97=B6=E9=97=B4=20fsql.Transaction=20=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E7=AD=89=E7=BA=A7=E5=8F=82=E6=95=B0=E7=9A=84=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 7 - FreeSql/FreeSql.xml | 347 +++++++++--------- FreeSql/Interface/IAdo.cs | 9 +- FreeSql/Interface/IFreeSql.cs | 10 +- .../AdoProvider/AdoProviderTransaction.cs | 19 +- .../FreeSql.Provider.MySql/MySqlProvider.cs | 4 +- .../Dameng/OdbcDamengProvider.cs | 4 +- .../Default/OdbcProvider.cs | 4 +- ..._OdbcGBaseUpdate.cs => OdbcGBaseUpdate.cs} | 0 .../GBase/OdbcGBaseProvider.cs | 4 +- .../GBase/__OdbcGBaseCodeFirst.cs | 2 +- .../GBase/__OdbcGBaseExpression.cs | 52 +-- .../MySql/OdbcMySqlProvider.cs | 4 +- .../Oracle/OdbcOracleProvider.cs | 4 +- .../PostgreSQL/OdbcPostgreSQLProvider.cs | 4 +- .../SqlServer/OdbcSqlServerProvider.cs | 4 +- .../FreeSql.Provider.Oracle/OracleProvider.cs | 4 +- .../PostgreSQLProvider.cs | 4 +- .../SqlServerProvider.cs | 4 +- .../FreeSql.Provider.Sqlite/SqliteProvider.cs | 4 +- 20 files changed, 254 insertions(+), 240 deletions(-) rename Providers/FreeSql.Provider.Odbc/GBase/Curd/{__OdbcGBaseUpdate.cs => OdbcGBaseUpdate.cs} (100%) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index d9f91124..dc0203b8 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index ac93e9cc..124441f8 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1960,10 +1960,18 @@ 事务体 () => {} - + 开启事务(不支持异步) + 超时,未执行完将自动提交 + 事务体 () => {} + + + + 开启事务(不支持异步) + + 事务体 () => {} 超时,未执行完将自动提交 @@ -2256,187 +2264,7 @@ - 增删查改,执行命令完成后触发 - - - - - CodeFirst迁移,执行之前触发 - - - - - CodeFirst迁移,执行完成触发 - - - - - Insert/Update自动值处理 - - - - - 内置解析功能,可辅助您进行解析 - - - - - 需要您解析的表达式 - - - - - 解析后的内容 - - - - - 实体类型 - - - - - 实体配置 - - - - - 索引配置 - - - - - 实体类型 - - - - - 实体的属性 - - - - - 实体的属性配置 - - - - - 标识符,可将 CurdBefore 与 CurdAfter 进行匹配 - - - - - 操作类型 - - - - - 实体类型 - - - - - 实体类型的元数据 - - - - - 执行的 SQL - - - - - 参数化命令 - - - - - 发生的错误 - - - - - 执行SQL命令,返回的结果 - - - - - 耗时(单位:Ticks) - - - - - 耗时(单位:毫秒) - - - - - 标识符,可将 SyncStructureBeforeEventArgs 与 SyncStructureAfterEventArgs 进行匹配 - - - - - 实体类型 - - - - - 执行的 SQL - - - - - 发生的错误 - - - - - 耗时(单位:Ticks) - - - - - 耗时(单位:毫秒) - - - - - 类型 - - - - - 属性列的元数据 - - - - - 反射的属性信息 - - - - - 获取实体的属性值,也可以设置实体的属性新值 - - - - - 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改 - - - - - 转小写同步结构 - - - - - 转大写同步结构 - - - - - 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。 + 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。 本功能会影响 IFreeSql 首次访问的速度。 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除 @@ -2970,10 +2798,163 @@ 事务体 () => {} - + 开启事务(不支持异步) + 超时,未执行完将自动提交 + 事务体 () => {} + + + + 开启事务(不支持异步) + + + + + + + 使用 and 拼接两个 lambda 表达式 + + + + true 时生效 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + + + 使用 or 拼接两个 lambda 表达式 + + + + true 时生效 + + + + + + 将 lambda 表达式取反 + + + + true 时生效 + + + + + 生成类似Mongodb的ObjectId有序、不重复Guid + + + + + + 插入数据 + + + + + + + 插入数据,传入实体 + + + + + + + + 插入数据,传入实体数组 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 插入数据,传入实体集合 + + + + + + + + 修改数据 + + + + + + + 修改数据,传入动态对象如:主键值 | 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} + + + 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合 + + + + + 开启事务(不支持异步),60秒未执行完将自动提交 + + 事务体 () => {} + + + + 开启事务(不支持异步) + + 超时,未执行完将自动提交 + 事务体 () => {} + + + + 开启事务(不支持异步) + + 事务体 () => {} 超时,未执行完将自动提交 diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index fd86d18c..fb830e6e 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -41,9 +41,16 @@ namespace FreeSql /// /// 开启事务(不支持异步) /// + /// 超时,未执行完将自动提交 + /// 事务体 () => {} + void Transaction(TimeSpan timeout, Action handler); + /// + /// 开启事务(不支持异步) + /// + /// /// 事务体 () => {} /// 超时,未执行完将自动提交 - void Transaction(Action handler, TimeSpan timeout); + void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler); /// /// 当前线程的事务 /// diff --git a/FreeSql/Interface/IFreeSql.cs b/FreeSql/Interface/IFreeSql.cs index e72033f9..4e1708c9 100644 --- a/FreeSql/Interface/IFreeSql.cs +++ b/FreeSql/Interface/IFreeSql.cs @@ -2,6 +2,7 @@ using FreeSql.Internal; using System; using System.Collections.Generic; +using System.Data; using System.Linq.Expressions; public interface IFreeSql : IFreeSql { } @@ -93,9 +94,16 @@ public interface IFreeSql : IDisposable /// /// 开启事务(不支持异步) /// + /// 超时,未执行完将自动提交 + /// 事务体 () => {} + void Transaction(TimeSpan timeout, Action handler); + /// + /// 开启事务(不支持异步) + /// + /// /// 事务体 () => {} /// 超时,未执行完将自动提交 - void Transaction(Action handler, TimeSpan timeout); + void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler); /// /// 数据库访问对象 diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs index 8ed0c1e2..7da093e8 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs @@ -1,7 +1,8 @@ using SafeObjectPool; using System; -using System.Collections.Generic; using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Diagnostics; using System.Linq; @@ -33,7 +34,7 @@ namespace FreeSql.Internal.CommonProvider public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null; - public void BeginTransaction(TimeSpan timeout) + public void BeginTransaction(TimeSpan timeout, IsolationLevel? isolationLevel) { if (TransactionCurrentThread != null) return; @@ -44,7 +45,7 @@ namespace FreeSql.Internal.CommonProvider try { conn = MasterPool.Get(); - tran = new Transaction2(conn, conn.Value.BeginTransaction(), timeout); + tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), timeout); } catch (Exception ex) { @@ -102,15 +103,15 @@ namespace FreeSql.Internal.CommonProvider public void CommitTransaction() => CommitTransaction(true); public void RollbackTransaction() => CommitTransaction(false); - public void Transaction(Action handler) - { - Transaction(handler, TimeSpan.FromSeconds(60)); - } - public void Transaction(Action handler, TimeSpan timeout) + public void Transaction(Action handler) => TransactionInternal(null, TimeSpan.FromSeconds(60), handler); + public void Transaction(TimeSpan timeout, Action handler) => TransactionInternal(null, timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => TransactionInternal(isolationLevel, timeout, handler); + + void TransactionInternal(IsolationLevel? isolationLevel, TimeSpan timeout, Action handler) { try { - BeginTransaction(timeout); + BeginTransaction(timeout, isolationLevel); handler(); CommitTransaction(); } diff --git a/Providers/FreeSql.Provider.MySql/MySqlProvider.cs b/Providers/FreeSql.Provider.MySql/MySqlProvider.cs index b5f2dd8d..edfe0054 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlProvider.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlProvider.cs @@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider; using FreeSql.MySql.Curd; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Linq.Expressions; using System.Threading; @@ -70,7 +71,8 @@ namespace FreeSql.MySql internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs index 40868691..97c84c96 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Threading; @@ -49,7 +50,8 @@ namespace FreeSql.Odbc.Dameng internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs index cac216c5..d4104e30 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs @@ -4,6 +4,7 @@ using FreeSql.Odbc.Default; using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Threading; @@ -83,7 +84,8 @@ namespace FreeSql.Odbc.Default internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseUpdate.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs similarity index 100% rename from Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseUpdate.cs rename to Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs diff --git a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs index eee74c06..66e28e82 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Threading; namespace FreeSql.Odbc.GBase @@ -46,7 +47,8 @@ namespace FreeSql.Odbc.GBase internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs index 15478af5..2895d9de 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs @@ -25,7 +25,7 @@ namespace FreeSql.Odbc.GBase { typeof(byte).FullName, (OdbcType.SmallInt, "byte","byte NOT NULL", false, false, 0) },{ typeof(byte?).FullName, (OdbcType.SmallInt, "byte", "byte", false, true, null) }, { typeof(ushort).FullName, (OdbcType.Int, "integer","integer NOT NULL", false, false, 0) },{ typeof(ushort?).FullName, (OdbcType.Int, "integer", "integer", false, true, null) }, - { typeof(uint).FullName, (OdbcType.BigInt, "int8","int8 NOT NULL", false, false, 0) },{ typeof(uint?).FullName, (OdbcType.BigInt, "int8", "int8", false, true, null) }, + { typeof(uint).FullName, (OdbcType.BigInt, "bigint","bigint NOT NULL", false, false, 0) },{ typeof(uint?).FullName, (OdbcType.BigInt, "bigint", "bigint", false, true, null) }, { typeof(ulong).FullName, (OdbcType.Decimal, "decimal","decimal(20,0) NOT NULL", false, false, 0) },{ typeof(ulong?).FullName, (OdbcType.Decimal, "decimal", "decimal(20,0)", false, true, null) }, { typeof(float).FullName, (OdbcType.Real, "smallfloat","smallfloat NOT NULL", false, false, 0) },{ typeof(float?).FullName, (OdbcType.Real, "smallfloat", "smallfloat", false, true, null) }, diff --git a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs index c250c87f..4d0a43f1 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs @@ -27,21 +27,21 @@ namespace FreeSql.Odbc.GBase switch (exp.Type.NullableTypeOrThis().ToString()) { case "System.Boolean": return $"(({getExp(operandExp)})::varchar not in ('0','false','f','no'))"; - case "System.Byte": return $"({getExp(operandExp)})::int2"; + case "System.Byte": return $"({getExp(operandExp)})::byte"; case "System.Char": return $"substr(({getExp(operandExp)})::char, 1, 1)"; case "System.DateTime": return $"({getExp(operandExp)})::timestamp"; - case "System.Decimal": return $"({getExp(operandExp)})::numeric"; - case "System.Double": return $"({getExp(operandExp)})::float8"; - case "System.Int16": return $"({getExp(operandExp)})::int2"; - case "System.Int32": return $"({getExp(operandExp)})::int4"; - case "System.Int64": return $"({getExp(operandExp)})::int8"; - case "System.SByte": return $"({getExp(operandExp)})::int2"; - case "System.Single": return $"({getExp(operandExp)})::float4"; - case "System.String": return $"({getExp(operandExp)})::varchar"; - case "System.UInt16": return $"({getExp(operandExp)})::int2"; - case "System.UInt32": return $"({getExp(operandExp)})::int4"; - case "System.UInt64": return $"({getExp(operandExp)})::int8"; - case "System.Guid": return $"({getExp(operandExp)})::uuid"; + case "System.Decimal": return $"({getExp(operandExp)})::decimal"; + case "System.Double": return $"({getExp(operandExp)})::float"; + case "System.Int16": return $"({getExp(operandExp)})::smallint"; + case "System.Int32": return $"({getExp(operandExp)})::integer"; + case "System.Int64": return $"({getExp(operandExp)})::bigint"; + case "System.SByte": return $"({getExp(operandExp)})::smallint"; + case "System.Single": return $"({getExp(operandExp)})::smallfloat"; + case "System.String": return $"({getExp(operandExp)})::nvarchar"; + case "System.UInt16": return $"({getExp(operandExp)})::integer"; + case "System.UInt32": return $"({getExp(operandExp)})::bigint"; + case "System.UInt64": return $"({getExp(operandExp)})::decimal"; + case "System.Guid": return $"({getExp(operandExp)})::char"; } } break; @@ -59,26 +59,26 @@ namespace FreeSql.Odbc.GBase switch (callExp.Method.DeclaringType.NullableTypeOrThis().ToString()) { case "System.Boolean": return $"(({getExp(callExp.Arguments[0])})::varchar not in ('0','false','f','no'))"; - case "System.Byte": return $"({getExp(callExp.Arguments[0])})::int2"; + case "System.Byte": return $"({getExp(callExp.Arguments[0])})::byte"; case "System.Char": return $"substr(({getExp(callExp.Arguments[0])})::char, 1, 1)"; case "System.DateTime": return $"({getExp(callExp.Arguments[0])})::timestamp"; - case "System.Decimal": return $"({getExp(callExp.Arguments[0])})::numeric"; - case "System.Double": return $"({getExp(callExp.Arguments[0])})::float8"; - case "System.Int16": return $"({getExp(callExp.Arguments[0])})::int2"; - case "System.Int32": return $"({getExp(callExp.Arguments[0])})::int4"; - case "System.Int64": return $"({getExp(callExp.Arguments[0])})::int8"; - case "System.SByte": return $"({getExp(callExp.Arguments[0])})::int2"; - case "System.Single": return $"({getExp(callExp.Arguments[0])})::float4"; - case "System.UInt16": return $"({getExp(callExp.Arguments[0])})::int2"; - case "System.UInt32": return $"({getExp(callExp.Arguments[0])})::int4"; - case "System.UInt64": return $"({getExp(callExp.Arguments[0])})::int8"; - case "System.Guid": return $"({getExp(callExp.Arguments[0])})::uuid"; + case "System.Decimal": return $"({getExp(callExp.Arguments[0])})::decimal"; + case "System.Double": return $"({getExp(callExp.Arguments[0])})::float"; + case "System.Int16": return $"({getExp(callExp.Arguments[0])})::smallint"; + case "System.Int32": return $"({getExp(callExp.Arguments[0])})::integer"; + case "System.Int64": return $"({getExp(callExp.Arguments[0])})::bigint"; + case "System.SByte": return $"({getExp(callExp.Arguments[0])})::smallint"; + case "System.Single": return $"({getExp(callExp.Arguments[0])})::smallfloat"; + case "System.UInt16": return $"({getExp(callExp.Arguments[0])})::integer"; + case "System.UInt32": return $"({getExp(callExp.Arguments[0])})::bigint"; + case "System.UInt64": return $"({getExp(callExp.Arguments[0])})::decimal"; + case "System.Guid": return $"({getExp(callExp.Arguments[0])})::char"; } break; case "NewGuid": return null; case "Next": - if (callExp.Object?.Type == typeof(Random)) return "(random()*1000000000)::int4"; + if (callExp.Object?.Type == typeof(Random)) return "(random()*1000000000)::integer"; return null; case "NextDouble": if (callExp.Object?.Type == typeof(Random)) return "random()"; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs index f779a505..95b21a6b 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Linq.Expressions; using System.Threading; @@ -48,7 +49,8 @@ namespace FreeSql.Odbc.MySql internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs index 9191ce78..e82bc16d 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Threading; @@ -49,7 +50,8 @@ namespace FreeSql.Odbc.Oracle internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs index 8358e646..d858489a 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Threading; namespace FreeSql.Odbc.PostgreSQL @@ -46,7 +47,8 @@ namespace FreeSql.Odbc.PostgreSQL internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs index 58c63d56..faf7847a 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs @@ -2,6 +2,7 @@ using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; +using System.Data; using System.Threading; namespace FreeSql.Odbc.SqlServer @@ -54,7 +55,8 @@ namespace FreeSql.Odbc.SqlServer internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs index dfed6ce9..6be0984e 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs @@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider; using FreeSql.Oracle.Curd; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Threading; @@ -44,7 +45,8 @@ namespace FreeSql.Oracle internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs index 550e9284..a900c60a 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs @@ -7,6 +7,7 @@ using NpgsqlTypes; using System; using System.Collections; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Linq.Expressions; using System.Net; @@ -97,7 +98,8 @@ namespace FreeSql.PostgreSQL internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs index 3efeae05..0de7d235 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs @@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider; using FreeSql.SqlServer.Curd; using System; using System.Collections.Generic; +using System.Data; using System.Threading; namespace FreeSql.SqlServer @@ -55,7 +56,8 @@ namespace FreeSql.SqlServer internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter(); diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs b/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs index 5c17d9f9..ba92b82f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs @@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider; using FreeSql.Sqlite.Curd; using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Threading; @@ -43,7 +44,8 @@ namespace FreeSql.Sqlite internal CommonExpression InternalCommonExpression { get; } public void Transaction(Action handler) => Ado.Transaction(handler); - public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout); + public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler); + public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler); public GlobalFilter GlobalFilter { get; } = new GlobalFilter();