|
|
@ -131,7 +131,7 @@ namespace Apewer.Source |
|
|
{ |
|
|
{ |
|
|
if (_transaction != null) |
|
|
if (_transaction != null) |
|
|
{ |
|
|
{ |
|
|
if (_autocommit) Commit(); |
|
|
if (_auto_commit) Commit(); |
|
|
else Rollback(); |
|
|
else Rollback(); |
|
|
_transaction = null; |
|
|
_transaction = null; |
|
|
} |
|
|
} |
|
|
@ -155,11 +155,18 @@ namespace Apewer.Source |
|
|
const string TransactionNotFound = "事务不存在。"; |
|
|
const string TransactionNotFound = "事务不存在。"; |
|
|
|
|
|
|
|
|
private IDbTransaction _transaction = null; |
|
|
private IDbTransaction _transaction = null; |
|
|
private bool _autocommit = false; |
|
|
private bool _auto_commit = false; |
|
|
|
|
|
|
|
|
/// <summary>获取已启动的事务。</summary>
|
|
|
/// <summary>获取已启动的事务。</summary>
|
|
|
public virtual IDbTransaction Transaction { get => _transaction; } |
|
|
public virtual IDbTransaction Transaction { get => _transaction; } |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>设置事务。指定为 NULL 将去除事务。</summary>
|
|
|
|
|
|
public void SetTransaction(IDbTransaction transaction, bool autoCommit = false) |
|
|
|
|
|
{ |
|
|
|
|
|
_transaction = transaction; |
|
|
|
|
|
_auto_commit = autoCommit; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
string Begin(bool commit, Class<IsolationLevel> isolation) |
|
|
string Begin(bool commit, Class<IsolationLevel> isolation) |
|
|
{ |
|
|
{ |
|
|
if (_transaction != null) |
|
|
if (_transaction != null) |
|
|
@ -175,7 +182,7 @@ namespace Apewer.Source |
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
_transaction = isolation ? _conn.BeginTransaction(isolation.Value) : _conn.BeginTransaction(); |
|
|
_transaction = isolation ? _conn.BeginTransaction(isolation.Value) : _conn.BeginTransaction(); |
|
|
_autocommit = commit; |
|
|
_auto_commit = commit; |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
catch (Exception ex) |
|
|
catch (Exception ex) |
|
|
@ -196,8 +203,8 @@ namespace Apewer.Source |
|
|
/// <para>Snapshot<br />通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。 表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。</para>
|
|
|
/// <para>Snapshot<br />通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。 表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。</para>
|
|
|
/// <para>Unspecified = -1<br />正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。</para>
|
|
|
/// <para>Unspecified = -1<br />正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。</para>
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="commit">在连接的生命周期结束时未结束事务,指定 TRUE 将自动提交,指定 FALSE 将自动回滚。</param>
|
|
|
/// <param name="autoCommit">在连接的生命周期结束时未结束事务,指定 TRUE 将自动提交,指定 FALSE 将自动回滚。</param>
|
|
|
public virtual string Begin(bool commit = false) => Begin(commit, null); |
|
|
public virtual string Begin(bool autoCommit = false) => Begin(autoCommit, null); |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// <para>使用指定的事务锁定行为启动事务。</para>
|
|
|
/// <para>使用指定的事务锁定行为启动事务。</para>
|
|
|
@ -209,9 +216,9 @@ namespace Apewer.Source |
|
|
/// <para>Snapshot<br />通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。 表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。</para>
|
|
|
/// <para>Snapshot<br />通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。 表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。</para>
|
|
|
/// <para>Unspecified = -1<br />正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。</para>
|
|
|
/// <para>Unspecified = -1<br />正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。</para>
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <param name="commit">在连接的生命周期结束时未结束事务,指定 TRUE 将自动提交,指定 FALSE 将自动回滚。</param>
|
|
|
/// <param name="autoCommit">在连接的生命周期结束时未结束事务,指定 TRUE 将自动提交,指定 FALSE 将自动回滚。</param>
|
|
|
/// <param name="isolation">指定事务锁定行为,不指定时将使用默认值。</param>
|
|
|
/// <param name="isolation">指定事务锁定行为,不指定时将使用默认值。</param>
|
|
|
public virtual string Begin(bool commit, IsolationLevel isolation) => Begin(commit, new Class<IsolationLevel>(isolation)); |
|
|
public virtual string Begin(IsolationLevel isolation, bool autoCommit = false) => Begin(autoCommit, new Class<IsolationLevel>(isolation)); |
|
|
|
|
|
|
|
|
/// <summary>提交事务。</summary>
|
|
|
/// <summary>提交事务。</summary>
|
|
|
public virtual string Commit() |
|
|
public virtual string Commit() |
|
|
|