0

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

テストはあまり意味がありませんが、なぜ失敗するのか疑問に思っています。

4

2 に答える 2

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);
于 2014-03-20T00:58:25.037 に答える
1

トランザクション スコープと EF に関する投稿はたくさんあります。
実際に、uncommitted read と nolock を検索に追加してください。

良い基本的な説明と例

FROM EF 6 on... EF トランザクション スコープ ドキュメント

一般的には必要ありません。(例外があります) そして、コミットされていない読み取りを使用するシステムをサポートする必要がないことを願っています。;-) 不潔...

幸運を

于 2013-11-13T14:00:36.350 に答える