System.Transactions.TransactionScope()
単体テストで使用 して、レコードを挿入し、読み取りを試み、トランザクション スコープをロールバックさせて、データベースに足跡を残さないようにしています。
1 var rep = new RunRepository();
2 using (var scop = new TransactionScope())
3 {
4 var runId = rep.SaveSwrsRun([Run data elements]); // returns PK RunId
5 var run = rep.FetchSwrsRun(runId); // returns an object of type Run
6 Assert.IsNotNull(run);
7 }
行 5 で例外がスローされ、エラー メッセージが表示されます
System.Transactions.TransactionManagerCommunicationException : 分散トランザクション マネージャー (MSDTC) のネットワーク アクセスが無効になっています。コンポーネント サービス管理ツールを使用して、MSDTC のセキュリティ構成でネットワーク アクセスに対して DTC を有効にしてください。
コンポーネント サービス管理ツールを確認したところ、ワークステーションでDTC が有効になっています。また、このMSDTC トランザクション スコープの問題スレッドを発見しました。このスレッドから、ネットワーク DTC アクセスを有効にする方法に誘導されます。
しかし、SQLサーバーをチェックしたとき、リモートアクセスのチェックボックスはすでにチェックされていました. 他に何かアイデアはありますか?
詳細...リポジトリが同じ接続を保持するように強制し、2番目のSQLステートメントの別のプールに戻らないようにすると、機能します。どうやら、2番目のSQLステートメントに別の接続を使用すると、DTCがトランザクションを「分散モード」にエスカレートするようになります(両方のSQLステートメントが同じサーバー上にあり、まったく同じ接続文字列を使用するため、そうすべきではありません)。たとえそれがあったとしても、それ(分散モード)はとにかく動作するはずです。