Big*_*ger 34 .net ado.net entity-framework transactions
当我发出"SaveChanges()"时,实体框架中的默认事务隔离级别是什么?我找不到任何地方.它应该是"可序列化的"吗?
Lad*_*nka 43
SaveChanges
使用DbTransaction
当前商店提供商的实现.这意味着默认事务隔离级别设置为数据库服务器的默认值.在SQL Server中它是READ COMMITTED
.如果要更改隔离级别,可以使用TransactionScope
.您还可以SaveChanges
在派生上下文base.SaveChanges()
中覆盖并直接在overriden方法中包装到范围.
public override void SaveChanges()
{
// Default isolation level for TransactionScope is Serializable
using (var scope = new TransactionScope())
{
base.SaveChanges();
scope.Complete();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以进一步改进此代码以允许您将隔离级别传递给SaveChanges
等等.一旦开始更改隔离级别,您应该始终如一地执行此操作.这意味着您应该在每次要运行事务时定义隔离级别,因为每个连接都配置了隔离级别,并且在使用连接池时会重用连接.
编辑: EF6中的默认事务级别已更改为READ COMMITTED SNAPSHOT