Каков уровень изоляции транзакции по умолчанию в Entity Framework, когда я запускаю «SaveChanges ()»? - PullRequest
30 голосов
/ 14 апреля 2011

Каков уровень изоляции транзакции по умолчанию в Entity Framework, когда я запускаю «SaveChanges ()»?Я не могу найти это нигде.Это будет "Сериализуемый"?

Ответы [ 3 ]

40 голосов
/ 14 апреля 2011

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

4 голосов
/ 25 ноября 2011

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

0 голосов
/ 05 сентября 2017

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

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

...