Пример #1
0
 protected override IDbTransaction BeginTransaction()
 {
     //只要找到一个当前数据库的连接管理对象,直到发生 Dispose 前,
     //这个连接都一直不会被关闭,那么代码块中的数据访问方法都是使用同一个打开的连接。
     //这样就不会升级为分布式事务。
     _conMgr = TransactionDependentConnectionManager.GetManager(this.DbSetting);
     return(_conMgr.Connection.BeginTransaction(this.IsolationLevel));
 }
Пример #2
0
        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;
        }