当我发出“SaveChanges()”时,Entity Framework中的默认事务隔离级别是多少? [英] What is the default transaction isolation level in Entity Framework when I issue “SaveChanges()”?

查看:682
本文介绍了当我发出“SaveChanges()”时,Entity Framework中的默认事务隔离级别是多少?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在发布SaveChanges()时,Entity Framework中的默认事务隔离级别是什么?我找不到任何地方应该是Serializable?

解决方案

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

  public override void SaveChanges()
{
// TransactionScope的默认隔离级别是Serializable
using(var scope = new TransactionScope())
{
base.SaveChanges();
scope.Complete();
}
}

您可以进一步改进此代码,让您传递隔离级别到 SaveChanges 等。一旦你开始改变隔离级别,你应该一直这样做。这意味着您应该每次要运行事务时定义隔离级别,因为每个连接配置的隔离级别并且连接在使用连接池时重用。



编辑:EF6中的默认交易级别已更改为 READ COMMITTED SNAPSHOT p>

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 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();
    }
}

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.

Edit: Default transaction level in EF6 has changed to READ COMMITTED SNAPSHOT

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆