問題タブ [transactionscope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
collections - TransactionScope とオブジェクトの状態のロールバック
設計上の問題の解決策を探しています。これには少し説明が必要です。コードを投稿しますが、これはさらに長くなります。
必要に応じてビジネス オブジェクトを保持するために使用するカスタム ジェネリック コレクションがあります。参照しやすいように、ビジネス オブジェクトBOと汎用コレクションGCを呼び出します。GC の内部には、削除のフラグが立てられたビジネス オブジェクトのプライベート コレクションがあります。このプライベート コレクションをPDCと呼びます。
それぞれが独自の PDC を持つ任意の数の GC と、コレクションに含まれていない他の BO を同時に持つことができます。
変更を保存するときは、すべての BO と GC をループして、それぞれに変更を保存させます。これは TransactionScope にラップされて発生するため、適切に保存できない場合はデータベースの変更をロールバックします。
GC の保存時に、その PDC の状態に問題があります。GC は、最初にすべての BO を更新とともに保存し、次に PDC 内の BO に関連付けられたレコードを削除してから、すべての BO の PDC をクリアします。これを行うのは、GC の状態がデータベースの新しい状態を正しく反映するようにするためです。
ここで、1 つ以上の GC が正常に保存された後、BO または GC が保存に失敗したとします。TransactionScope はロールバックを実行します。データベースから削除されたレコードは復元されますが、PDC の一部またはすべてが消去され、その状態情報が失われます。
ここに私の難問があります: コミットが発生するまで PDC 情報を保持し、適切なコレクションがクリアされることを保証するにはどうすればよいですか?
TransactionScope には、変更がいつコミットされたかを知らせるためにキャッチできるイベントがありません。特定のトランザクションによって影響を受ける可能性のある多くの BO と GC があるため、一度に 1 つの GC を処理するようにトランザクションを制限することはできません。
助言がありますか?
.net - Oracle 上の .NET TransactionScope
OracleでDAABとTransactionScopeを使用しています。私たちのアプリケーションは、1 つのデータベースへのすべての接続を管理します。このタイプの実装には「Oramts.dll」が必要なようです。MTS なしで DAAB と TrasnsactionScope を使用する方法はありますか?
ありがとう!
.net - TransactionScope: 良くなりましたか?
TransactionScope が最初に登場したとき、開発マシン (XP) とデータベース サーバー (Windows Server 2003) の間で動作させる際に深刻な問題に遭遇しました。
もっと調べてみると、これはトリッキーで広範囲に及ぶ問題であり、本番環境で頭痛の種になる可能性があるように見えたので、この方法でトランザクションを処理しないことに決めました (構文がとても好きで、本当に望んでいたにもかかわらず)働きます)。
これらの問題はまだありますか、それとも安全に使用できますか? これを問題なく定期的に使用していますか?
どうもありがとう!
注:かなり時間が経ちましたが、問題は Distribute Transaction Coordinator に関係していたと思います。私は長い間それをいじっていましたが、それを機能させることができませんでした。
c# - ADO.NET 接続を作成し、アンビエント トランザクションを無視する方法はありますか?
TransactionScopeRequired=true の WCF サービスで実行している状況があります。これは、常にアンビエント トランザクションが存在することを意味します。
ただし、アプリケーションの存続期間中は新しい接続を開始する必要があります。つまり、abmbient トランザクションを使用することはできません。
これを行う方法についてのアイデアはありますか?これを行うだけで、自動的にアンビエント トランザクションが使用されます。
実際には、次のようにすると、この例をより簡単にすることができます。
接続で実際に TransactionScope を取得したくありません。実際のコードでは、スコープ内で DB アクションを実行するためにさらに多くのことが行われています。トランザクション スコープの有効期間を過ぎても維持する必要があるのは 1 つだけです。
本当の状況は言及する価値があると思います。ここで実際に起こっていることは、WCF サービスの呼び出し中に、Enterprise Library Caching ブロックを使用してオブジェクトをキャッシュに追加することです。このオブジェクトはデータ テーブルですが、継続的な通知が設定されている Oracle へのオープン接続も保持します。これにより、基になる Oracle テーブルが変更されたときに、キャッシュされたデータセットを自動的に更新できます。
データ キャッシュ項目には、WCF で初期化された任意の数のスレッドからアクセスできます。これらのスレッドはすべて、独自のトランザクション スコープで実行されます。OracleConnection オブジェクトをキャッシュに入れていると考えることができると思います。テキスト/サンプルコードのより良いブロックは次のようになります:
ポイントは、複数のスレッドとトランザクション スコープにわたって有効期間が長い接続があることです。
sql-server - ADO.NET のリファクタリング - SqlTransaction と TransactionScope
ADO.NET SqlCommand オブジェクトを作成し、データベース (SQL Server 2005) に保存されるアイテムのリストをループする小さな C# メソッドを "継承" しました。
現在、従来の SqlConnection/SqlCommand アプローチが使用されており、すべてが機能することを確認するために、2 つの手順 (古いエントリを削除してから新しいエントリを挿入する) が ADO.NET SqlTransaction にラップされています。
さて、私は最近 .NET TransactionScope クラスについて多くのことを読んでいて、ここでどのようなアプローチが望ましいのか疑問に思っていました。使用に切り替えることで何か(読みやすさ、速度、信頼性)が得られますか
あなたは何を好みますか、そしてその理由は何ですか?
マルク
subsonic3 - subsonic 3 - 操作はトランザクションの状態に対して有効ではありません
次のコードを試しています
ud.save() に到達すると、「操作はトランザクションの状態に対して有効ではありません。」というエラーが表示されます。---> System.Transactions.TransactionPromotionException: トランザクションの昇格を試行中にエラーが発生しました'
トランザクション部分をコメントアウトすると、正常に動作します.SingleOrDefaultがdbから切断されていませんか?
ありがとう
c# - 破棄されたオブジェクトにアクセスできません。取引
Entity Framework を使用し、トランザクション スコープ内で単体テストを実行しています。当初、タイトルにエラーが発生していました。
私は何とか問題を切り分けることができました。
現在発生しているエラーは、「The operation is not valid for the state of the transaction..」です。
トランザクション スコープ 2 を削除すると、すべて正常に動作します。
スコープ 2 をアンビエント トランザクションとしてマークすると、正常に動作します。
c# - TransactionScopeの階層
トランザクションスコープの階層を持つことは可能ですか?
外部トランザクションスコープが破棄した場合、内部トランザクションスコープで行われた変更はどうなりますか?
私の特定の問題は、トランザクションスコープを持つコードを実行するテストコードがあることです。トランザクションスコープを使用して2番目のコードセットを呼び出すと、「破棄されたオブジェクトにアクセスできません。トランザクション」が表示されます。内側のトランザクションスコープの破棄が外側のトランザクションスコープも破棄している可能性があります。
c# - TransactionScope を認識するクラスを実装するにはどうすればよいですか?
いくつかのデータベースと Active Directory でいくつかの更新を実行している WCF サービスがあります。Active Directory はトランザクションをサポートできないため、ロールバックが発生したときに補正アクションを実行する「DirectoryRepository」クラスに実装したいと考えています。
私のコードはTransactionScopeを使用しています...
DirectoryRepository で現在のトランザクションを認識し、ロールバックするタイミングを通知するにはどうすればよいですか?
c# - BLでネストされたデータコンテキストを処理する方法は?
これは、ネストされたDataContext(テストされていない)の例です。この問題は、TransactionScopeが小さな実験に追加されたときに始まります(上記のように)。AddFolder関数の最初のAddFileは、トランザクションをDTCにエスカレートします(これは必ず悪いことです)。これは、AddFileが新しいDataContextを初期化し、DBへの2番目の接続を開くためです。
- DTCの使用が発生しないネストされたDataContextを使用するにはどうすればよいですか?
- これはすべて明らかに間違っていますか?DataContextを別の方法で使用する必要がありますか?