当我发出“SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?

时间:2022-11-03
本文介绍了当我发出“SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

当我发出SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?我在任何地方都找不到它.应该是可序列化"吗?

What is the default transaction isolation level in Entity Framework when I issue "SaveChanges()"? I can not find it anywhere. Shall it be "Serializable"?

推荐答案

SaveChanges 使用当前存储提供程序的 DbTransaction 实现.这意味着默认事务隔离级别设置为数据库服务器的默认值.在 SQL Server 中,它是 READ COMMITTED.如果要更改隔离级别,可以使用 TransactionScope.您还可以在派生上下文中覆盖 SaveChanges 并在覆盖方法中直接将 base.SaveChanges() 包装到范围.

SaveChanges uses implementation of DbTransaction for current store provider. It means that default transaction isolation level is set to default value for the database server. In SQL Server it is READ COMMITTED. If you want to change isolation level you can use TransactionScope. You can also override SaveChanges in your derived context and wrap base.SaveChanges() to the scope directly in overriden method.

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

您可以进一步改进此代码以允许您将隔离级别传递给 SaveChanges 等.一旦您开始更改隔离级别,您应该始终如一地执行此操作.这意味着每次要运行事务时都应该定义隔离级别,因为 隔离级别是按连接配置的 和连接在使用连接池时被重用.

You can further improve this code to allow you passing isolation level to SaveChanges etc. Once you start changing isolation levels you should do it consistently. It means you should define isolation level each time you want to run a transaction because isolation level is configured per connection and connections are reused when using connection pooling.

EF6 中的默认事务级别已更改为 READ COMMITTED SNAPSHOT

Default transaction level in EF6 has changed to READ COMMITTED SNAPSHOT

这篇关于当我发出“SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一条:当数据库更新时如何通知我的程序? 下一条:如何在实体框架中回滚事务

相关文章

最新文章