【问题标题】:entity framework transactions and sql azure default isolation level实体框架事务和 sql azure 默认隔离级别
【发布时间】:2012-08-01 13:46:27
【问题描述】:

据本文http://social.technet.microsoft.com/wiki/contents/articles/handling-transactions-in-sql-azure.aspx

SQL Azure default database wide setting is to enable read committed 
snapshot isolation (RCSI) 

我是否正确地假设:

A) 以下代码默认为 Serializable(覆盖数据库默认值)

        using (TransactionScope transaction = new TransactionScope())
        {                                                               

        }

B) 以下代码默认为带有快照隔离的 ReadCommitted(而不仅仅是普通的 ReadCommitted)

        TransactionOptions options = new TransactionOptions();
        options.Timeout = TimeSpan.FromMinutes(1);
        options.IsolationLevel = IsolationLevel.ReadCommitted;

        using (TransactionScope transaction = new 
          TransactionScope(TransactionScopeOption.Required, options))
        {                                                               

        }

【问题讨论】:

    标签: entity-framework entity-framework-4 azure-sql-database transactionscope isolation-level


    【解决方案1】:

    a) 是的。默认情况下,隔离级别将是可序列化的。 http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx

    b) 对于该事务,隔离级别将只是 ReadCommitted。对于快照,您需要

      options.IsolationLevel = IsolationLevel.Snapshot;
    

    http://msdn.microsoft.com/en-us/library/system.data.isolationlevel.aspx

    【讨论】:

    • 所以我需要使用事务范围和快照来在 SQL Azure 上启用读取提交的快照。此外,事务范围之外的任何选择(例如简单的选择 objectcontext.employees.Select(e => e.FirstName))是否将成为 SQL Azure 中读取提交快照的默认数据库隔离级别?
    • 当然,当您在该事务之外执行选择时,它将再次默认读取已提交。
    【解决方案2】:

    我不确定我是否认为您的隔离级别将只是 SnapShot 而不是读取提交的快照,这是两种不同的隔离

    它与 SNAPSHOT 隔离级别的不同之处在于它不提供阅读器 使用事务开始时可用的行的最后提交版本,读取器获取语句开始时可用的行的最后提交版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多