protected override IDbTransaction BeginTransaction() { //只要找到一个当前数据库的连接管理对象,直到发生 Dispose 前, //这个连接都一直不会被关闭,那么代码块中的数据访问方法都是使用同一个打开的连接。 //这样就不会升级为分布式事务。 _conMgr = TransactionDependentConnectionManager.GetManager(this.DbSetting); return(_conMgr.Connection.BeginTransaction(this.IsolationLevel)); }
internal ManagedConnectionDbAccesser(DbSetting dbSetting) { if (dbSetting == null) { throw new ArgumentNullException("dbSetting"); } _connectionManager = TransactionDependentConnectionManager.GetManager(dbSetting); _dba = new DbAccesser(dbSetting, _connectionManager.Connection); }
public static TransactionDependentConnectionManager GetManager(DbSetting dbSetting) { var res = new TransactionDependentConnectionManager(); res._block = LocalTransactionBlock.GetWholeScope(dbSetting.Database); if (res._block != null) { res._connection = res._block.WholeTransaction.Connection; } else { //没有定义事务范围时,无需共享连接。 res._connection = dbSetting.CreateConnection(); res._connection.Open(); } res._dbSetting = dbSetting; return(res); }
public static TransactionDependentConnectionManager GetManager(DbSetting dbSetting) { var res = new TransactionDependentConnectionManager(); res._block = LocalTransactionBlock.GetWholeScope(dbSetting.Database); if (res._block != null) { res._connection = res._block.WholeTransaction.Connection; } else { //没有定义事务范围时,无需共享连接。 res._connection = dbSetting.CreateConnection(); res._connection.Open(); } res._dbSetting = dbSetting; return res; }