/// <summary>
        /// Gets the new max key.
        /// </summary>
        /// <param name="transactionScopeConnection">The transaction scope connection.</param>
        /// <param name="tableName">Name of the table.</param>
        /// <param name="columnName">Name of the column.</param>
        /// <returns></returns>
        public override Int32 GetNewMaxKeyInt32(string tableName, string columnName, IDbConnection transactionScopeConnection)
        {
            // this will join in to any root transaction
            TransactionOptions serializableTransaction = new TransactionOptions();
            serializableTransaction.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
            using (DbTransactionScope scope = new DbTransactionScope(TransactionScopeOption.Required, serializableTransaction))
            {
                if (transactionScopeConnection == null)
                {
                    using (new DbConnectionScope())
                    {
                        Int32 newMaxKey = GetNewMaxKeyInt32(tableName, columnName, DbConnectionScope.Current.Connection);

                        scope.Complete();

                        return newMaxKey;
                    }
                }
                else
                {
                    using (IDataReader reader = ExecuteQueryReader(string.Format("select max({0})+1 from {1}", columnName, tableName), transactionScopeConnection))
                    {
                        Int32 ret = 1;
                        if (reader.Read() && !reader.IsDBNull(0))
                        {
                            ret = Database.Current.GetInt32(reader, 0);
                        }
                        scope.Complete();

                        return ret;
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Ares the transactions nested.
        /// </summary>
        /// <returns></returns>
        public static bool AreTransactionsNested()
        {
            if (Log.Enabled) Log.Entry("AreTransactionsNested", s_scopes);

            bool result = false;

            if (s_scopes != null && s_scopes.Count > 1)
            {
                int uniqueTransactionScopes = 1;
                int l = s_scopes.Count;

                if (Log.Enabled) Log.LogDebug10("Transaction scope count = {0}", l);

                DbTransactionScope[] ar = new DbTransactionScope[l];
                s_scopes.CopyTo(ar, 0);
                DbTransactionScope x;
                int j;
                for (int i = 1; i < l; i++)
                {
                    x = ar[i];

                    for (j = 0; j < l; j++)
                    {
                        if (i != j && !x.Transaction.Equals(ar[j].Transaction))
                        {
                            break;
                        }
                    }

                    if (j < l)
                    {
                        uniqueTransactionScopes++;
                    }
                }

                if (Log.Enabled) Log.LogDebug10("Unique transaction scopes = {0}", uniqueTransactionScopes);

                result = uniqueTransactionScopes > 1;
            }

            if (Log.Enabled) Log.Exit("AreTransactionsNested", result);

            return result;
        }