Какой уровень изоляции транзакций используется по умолчанию в .NET (C#)?

«Какой уровень изоляции транзакций используется по умолчанию в .NET (C#)?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В .NET, при использовании TransactionScope, по умолчанию применяется уровень изоляции ReadCommitted.

Почему именно он? Это баланс между производительностью и целостностью данных. Он предотвращает чтение "грязных" данных (незафиксированных изменений других транзакций), но допускает неповторяемые чтения и фантомные чтения, что повышает параллелизм.

Пример использования по умолчанию:

using (var transaction = new TransactionScope())
{
    // Операции с базой данных будут выполняться в ReadCommitted
    using (var connection = new SqlConnection(connectionString))
    {
        // ... выполнение команд
    }
    transaction.Complete(); // Фиксация транзакции
}

Как изменить уровень изоляции явно:

var options = new TransactionOptions
{
    IsolationLevel = IsolationLevel.Serializable // Или другой уровень
};
using (var transaction = new TransactionScope(TransactionScopeOption.Required, options))
{
    // Операции с базой данных
    transaction.Complete();
}

Важно: Фактический уровень изоляции также зависит от настроек и возможностей самой СУБД (SQL Server, PostgreSQL и т.д.).