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