Подтвердить что ты не робот

Каков уровень изоляции транзакций по умолчанию в Entity Framework при выпуске "SaveChanges()"?

Каков уровень изоляции транзакций по умолчанию в Entity Framework при выпуске "SaveChanges()"? Я не могу найти его нигде. Должна ли быть "Serializable"?

4b9b3361

Ответ 1

SaveChanges использует реализацию DbTransaction для текущего поставщика хранилища. Это означает, что уровень изоляции транзакции по умолчанию установлен на значение по умолчанию для сервера базы данных. В SQL Server это READ COMMITTED. Если вы хотите изменить уровень изоляции, вы можете использовать TransactionScope. Вы также можете переопределить SaveChanges в производном контексте и перенести base.SaveChanges() в область действия непосредственно в режиме переопределения.

public override void SaveChanges()
{
    // Default isolation level for TransactionScope is Serializable
    using (var scope = new TransactionScope())
    {
        base.SaveChanges();
        scope.Complete();
    }
}

Вы также можете улучшить этот код, чтобы вы могли пройти уровень изоляции до SaveChanges и т.д. После того, как вы начнете изменять уровни изоляции, вы должны делать это последовательно. Это означает, что вы должны определять уровень изоляции каждый раз, когда хотите выполнить транзакцию, потому что уровень изоляции настроен для каждого подключения, и соединения используются повторно при использовании пула соединений.

Изменить: Уровень транзакции по умолчанию в EF6 изменился на READ COMMITTED SNAPSHOT

Ответ 2

По умолчанию инфраструктура System.Transactions создает транзакции Serializable.

Ответ 3

Как и EF 6, уровень изоляции по умолчанию для транзакции SQL Server READ COMMITTED. Ссылка здесь: Entity Framework Работа с транзакциями (EF6 в дальнейшем)

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