В SQL Что такое максимальное время ожидания транзакции по умолчанию - PullRequest
8 голосов
/ 06 мая 2011

Какое значение по умолчанию в machine.config для maxTimeout (см. Пример), если в machine.config отсутствует элемент "system.transactions"?

<system.transactions>
   <machineSettings maxTimeout="??:??:??" />
</system.transactions>

Я спрашиваю об этом, потому что код вызывает сбой из-за следующего исключения, и кажется, что это связано с транзакцией, превышающей тайм-аут, происходит сбой во время метода SaveChanges, а вот следующее исключение: :

The transaction associated with the current connection has completed
but has not been disposed. The transaction must be disposed before
the connection can be used to execute SQL statements.

Это фрагмент кода, который вылетает:

using (TransactionScope transaction = TransactionHelper.CreateTransactionScope())
{
    using (EFContext efDBContext = new EFContext())
    {
        try
        {
            efDBContext.Connection.Open();  

            foreach (MyEntity currentEntity in myEntities)
            {
                //Insertion
            }

            transaction.Complete();
        }
        catch (Exception ex)
        {
            //Inspect current entity
            //Get Total Time of the run
            //Number of entities processed
        }
        finally
        {
            if (esfDBContext.Connection.State == ConnectionState.Open)
                esfDBContext.Connection.Close();
        }
    }
}

Вот как я создаю TransactionScope:

public static TransactionScope CreateTransactionScope(TransactionScopeOption option = TransactionScopeOption.Required, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
{
    var transactionOptions = new TransactionOptions()
    {
        Timeout = TimeSpan.MaxValue,
        IsolationLevel = isolationLevel
    };

    return new TransactionScope(option, transactionOptions);
}

Ответы [ 2 ]

15 голосов
/ 06 мая 2011

По умолчанию = 10 минут.Макс = Бесконечность

8 голосов
/ 06 мая 2011

Нет тайм-аута на стороне сервера - MS SQL.

Это всегда клиент, который выдает исключение по истечении заданного времени.

http://blogs.msdn.com/b/khen1234/archive/2005/10/20/483015.aspx

Вы действительно хотите посмотреть время ожидания команды.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx

По умолчанию здесь 30 секунд.

...