【问题标题】:What is the default transaction isolation level in Entity Framework when I issue “SaveChanges()”?当我发出“SaveChanges()”时,Entity Framework 中的默认事务隔离级别是什么?
【发布时间】:2011-04-14 00:09:35
【问题描述】:

当我发出“SaveChanges()”时,Entity Framework 中的默认事务隔离级别是什么?我在任何地方都找不到它。应该是“Serializable”吗?

【问题讨论】:

    标签: .net entity-framework ado.net transactions


    【解决方案1】:

    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 等。一旦您开始更改隔离级别,您应该始终如一地执行此操作。这意味着您应该在每次要运行事务时定义隔离级别,因为isolation level is configured per connection 和连接在使用连接池时会被重用。

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

    【讨论】:

    • 由于代码必须发生在事务本身的范围内,这不是没用吗?
    • 可能需要将 base.savechanges 包含在 try cacth 中,只是为了在 base.savechanges 失败时执行 scope.complete:catch e { scope.complete(); throw }
    • @ChadMoran,你能解释一下你的评论吗?
    • 此处有关此答案的其他数据:Tips to avoid deadlocks in Entity Framework applications
    • @Ladislav Mrnka,也许我错了,但“READ_COMMITTED_SNAPSHOT”不应该是隔离级别。它应该是一个可以设置的选项,以修改“READ_COMMITTED”隔离级别的行为。另一方面,如果必须在 SQL Server 上显式启用此选项,EF 如何默认使用“READ_COMMITTED_SNAPSHOT”?隔离级别记录在此处msdn.microsoft.com/en-us/library/ms173763.aspx,顺便说一下,在同一链接中,我们可以找到 READ_COMMITTED_SNAPSHOT 选项的解释。我错过了什么吗?
    【解决方案2】:

    默认情况下,System.Transactions 基础结构创建可序列化事务。

    【讨论】:

      【解决方案3】:

      从 EF 6 开始,SQL Server 事务的默认隔离级别是 READ COMMITTED。参考在这里:Entity Framework Working with Transactions (EF6 Onwards)

      对于其他提供者(相同参考)“事务的隔离级别是数据库提供者认为其默认设置的任何隔离级别”。因此,您必须查看该提供商的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2010-09-26
        • 1970-01-01
        • 2019-04-24
        • 2015-09-25
        相关资源
        最近更新 更多