Exemple #1
0
        /// <summary>
        /// 현재 Transaction에 해당하는 Connection을 반환한다.
        /// 이미 열려진 Connection을 재활용하거나, TransactionScope가 활성화되어 있다면 새로운 connection을 빌드해서 반환한다.
        /// TransactionScope도 없고, <see cref="Database"/>관련해서 아직 만들어진게 없다면, 새로운 <see cref="DbConnection"/>을 생성하고, Open() 해서 반환한다.
        /// </summary>
        /// <param name="db">instance of <see cref="Database"/></param>
        /// <param name="newConnectionCreated">새로 Connection이 만들어졌는지</param>
        /// <param name="connectionFactory">Connection을 새로 만드는 메소드</param>
        /// <returns>
        /// TransactionScope이 활성화되어 있다면, TransactionScope에서 활성화된 <see cref="DbConnection"/>을 반환,
        /// TransactionScope가 없다면 새로운 <see cref="DbConnection"/>을 생성하여 반환한다.</returns>
        public static DbConnection CreateTransactionScopeConnection(Database db, ref bool newConnectionCreated,
                                                                    Func<Database, DbConnection> connectionFactory = null) {
            db.ShouldNotBeNull("db");
            connectionFactory = connectionFactory ?? ((database) => OpenConnection(database));

            // newConnectionCreated = false;
            DbConnection connection;

            // TransactionScope에 참여한 Connection이 있다면 그 Connection을 반환합니다.
            try {
                connection = TransactionScopeConnections.GetConnection(db);
            }
            catch(Exception ex) {
                if(log.IsWarnEnabled)
                    log.WarnException("TransactionScopeConnections.GetConnection() 수행 시에 예외가 발생했습니다. 무시하고 새로운 connection을 생성합니다.", ex);

                connection = null;
            }

            // 새롭게 Connection을 빌드합니다.
            if(connection == null) {
                if(IsDebugEnabled)
                    log.Debug("TransactionScope에 속한 connection이 없습니다. 새로운 connection을 생성하고, Open합니다...");

                connection = connectionFactory(db);
                newConnectionCreated = (connection != null);

                if(IsDebugEnabled)
                    log.Debug("새로운 connection을 생성하고, Open했습니다. newConnectionCreated=[{0}]", newConnectionCreated);
            }

            return connection;
        }
Exemple #2
0
        /// <summary>
        /// 현재 Transaction에 해당하는 Connection을 반환한다.
        /// 이미 열려진 Connection을 재활용하거나, TransactionScope가 활성화되어 있다면 새로운 connection을 빌드해서 반환한다.
        /// TransactionScope도 없고, <see cref="Database"/>관련해서 아직 만들어진게 없다면, 새로운 <see cref="DbConnection"/>을 생성하고, Open() 해서 반환한다.
        /// </summary>
        /// <param name="db">instance of <see cref="Database"/></param>
        /// <returns>
        /// TransactionScope이 활성화되어 있다면, TransactionScope에서 활성화된 <see cref="DbConnection"/>을 반환,
        /// TransactionScope가 없다면 새로운 <see cref="DbConnection"/>을 생성하여 반환한다.</returns>
        public static DbConnection CreateTransactionScopeConnection(Database db) {
            db.ShouldNotBeNull("db");

            var newConnectionCreated = false;
            return CreateTransactionScopeConnection(db, ref newConnectionCreated);
        }