/// <summary> /// 创建一个连接 /// <remarks> /// the connection retrieve process is as the following procedure: /// <list type="bullet"> /// <item>if no transaction exists, this method create and return a new DbConnection instance</item> /// <item>if transaction exists, this method should return a cached DbConnection instance</item> /// </list> /// <param name="isConnectionCreator">输出参数,返回连接是否创建成功</param> /// <param name="name">数据库连接名称</param> /// </remarks> /// </summary> private DbConnection CreateConnection(string name, out bool isConnectionCreator) { DbConnection connection; isConnectionCreator = false; // non-transactional operation GraphWithoutTransaction connections = GraphWithoutTx; if (Transaction.Current == null) { connection = GetConnectionWithoutTx(name); } else { connection = OnGetConnectionWithTransaction(Transaction.Current); } if ((connection != null) && (connection.State != ConnectionState.Open)) { if (string.IsNullOrEmpty(connection.ConnectionString)) { connection.ConnectionString = DbConnectionManager.GetConnectionString(name); } connection.Open(); WriteTraceInfo(connection.DataSource + "." + connection.Database + "[" + DateTime.Now.ToString("yyyyMMdd HH:mm:ss.fff") + "]", " Open Connection "); } return(connection); }
/// <summary> /// 根据名称得到当前引用的连接 /// </summary> /// <param name="connName">数据库连接名称</param> /// <returns>连接对象</returns> protected ReferenceConnection GetRefConnectionWithoutTx(string connName) { ReferenceConnection refConnection = null; GraphWithoutTransaction connections = 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); }
private async Task <Tuple <DbConnection, bool> > CreateConnectionAsync(string name) { bool isConnectionCreator = false; // non-transactional operation GraphWithoutTransaction connections = this.GraphWithoutTx; DbConnection connection = GetConnection(name); if ((connection != null) && (connection.State != ConnectionState.Open)) { if (connection.ConnectionString.IsNullOrEmpty()) { connection.ConnectionString = DbConnectionManager.GetConnectionString(name); } await OpenConnectionAsync(name, connection); WriteTraceInfo(connection.DataSource + "." + connection.Database + "[" + SNTPClient.AdjustedTime.ToString("yyyyMMdd HH:mm:ss.fff") + "]", " Open Connection "); } return(new Tuple <DbConnection, bool>(connection, isConnectionCreator)); }