/// <summary>
        /// 重写获取当前事物所使用的数据连接的函数
        /// </summary>
        /// <param name="ts">事物对象</param>
        /// <returns>数据连接</returns>
        protected override DbConnection OnGetConnectionWithTransaction(Transaction ts)
        {
            Connections connections = null;

            GraphWithTransaction graph = AutoEnlistDbContext.GraphWithTx;

            lock (graph)
            {
                // current transaction exists only in current HttpContext or Thread
                if (graph.TryGetValue(ts, out connections) == false)
                {
                    connections = new Connections();
                    graph.Add(Transaction.Current, connections);
                }
            }

            ReferenceConnection resultConnection = null;

            DoSafeConnectionOp(this.Name, connections,
                               (refConnection) =>
            {
                refConnection.ReferenceCount++;
                resultConnection = refConnection;
            },
                               () =>
            {
                resultConnection    = new ReferenceConnection(this.Name, DbConnectionManager.GetConnection(this.Name));
                IsConnectionCreator = true;

                connections.Add(this.Name, resultConnection);
            });

            return(resultConnection.Connection);
        }
示例#2
0
        /// <summary>
        /// 根据名称得到当前引用的连接
        /// </summary>
        /// <param name="connName">数据库连接名称</param>
        /// <returns>连接对象</returns>
        protected ReferenceConnection GetRefConnectionWithoutTx(string connName)
        {
            ReferenceConnection result = null;

            DoSafeConnectionOp(connName,
                               this.GraphWithoutTx,
                               (refConnection) =>
            {
                refConnection.ReferenceCount++;
                result = refConnection;
            },
                               () =>
            {
                DbConnection connection   = DbConnectionManager.GetConnection(connName);
                this._isConnectionCreator = true;

                result = new ReferenceConnection(connName, connection);
                this.GraphWithoutTx.Add(connName, result);
            });

            return(result);
        }
示例#3
0
        /// <summary>
        /// 根据名称得到当前引用的连接
        /// </summary>
        /// <param name="connName">数据库连接名称</param>
        /// <returns>连接对象</returns>
        protected ReferenceConnection GetRefConnectionWithoutTx(string connName)
        {
            ReferenceConnection refConnection = null;

            GraphWithoutTransaction connections = this.GraphWithoutTx;

            lock (connections)
            {
                if (connections.TryGetValue(connName, out refConnection) == false)
                {
                    DbConnection connection = DbConnectionManager.GetConnection(connName);
                    this._isConnectionCreator = true;

                    refConnection = new ReferenceConnection(connName, connection);
                    connections.Add(connName, refConnection);
                }
                else
                {
                    refConnection.ReferenceCount++;
                }
            }

            return(refConnection);
        }