交易范围隔离级别和EF6

时间:2013-11-13 09:36:48

标签: entity-framework

我正在测试EF6隔离级别,但测试失败了:

Assert.AreEqual failed. Expected:<ReadUncommitted>. Actual:<Unspecified>.

测试:

public void TestIsolationLevelReadUncommitted()
{
  // Arrange
  using (
    new TransactionScope(TransactionScopeOption.Required,
      new TransactionOptions {IsolationLevel = IsolationLevel.ReadUncommitted}))
  {
    using (var context = new BoligEntities())
    {
      // Act
      context.GetDbConnection().Open();
      var isolationLevel = context.GetDbConnection().GetIsolationLevel();

      // Assert
      Assert.AreEqual(System.Data.IsolationLevel.ReadUncommitted, isolationLevel);
    }
  }
}

测试没有多大意义,但我想知道为什么会失败。

2 个答案:

答案 0 :(得分:1)

有很多关于交易范围和EF的帖子 实际上,在搜索中添加未提交的读取和非锁定。

Good basic explanation and example

从EF 6开始...... EF transaction scope docu

一般来说,你不需要它。 (也有例外) 和  我希望我不必支持使用未提交读取的系统。 ;-) 肮脏......

祝你好运

答案 1 :(得分:1)

交易与数据库不同。看起来您正在检查打开连接的隔离级别,但不检查正在运行的事务。 一般来说 - 您可以使用不同的隔离级别在此连接上打开连接并运行多个事务。

using (var context = new MyEntities())
{
     using (var tran = context.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
     {

         Assert.AreEqual(System.Data.IsolationLevel.ReadUncommitted, tran.UnderlyingTransaction.IsolationLevel);