wcf サービスで TransactionScope クラスを使用して、wcf サービスでのデータベース操作を 1 つのトランザクションにグループ化しています。問題のテーブルのすべての変更をキャプチャするために、SQL Server Change Data Capture を使用しています。
すべてのデータベース cdc の変更を、トランザクション スコープが作成された元のサービス操作に報告できるようにしたいと考えています。
つまり、1 つのトランザクション スコープで実際に 3 db の更新を行う SavePolicy というサービス操作があるとします。そのスコープでは、次のようなコードを使用してトランザクション ID を取得できます。
TransactionInformation info = Transaction.Current.TransactionInformation;
transactionId = Guid.Empty == info.DistributedIdentifier ? info.LocalIdentifier : info.DistributedIdentifier.ToString();
このIDはSQLサーバーのどこかに保存されていますか? エンティティ フレームワークとストアド プロシージャを使用して、通常の crud 操作を行っています。
fn_cdc_get_all_changes_ などの cdc 関数を使用してすべての変更データを取得でき、cdc.lsn_time_mapping テーブルにトランザクション ID がありますが、これは同じことのようには見えません。
C# トランザクション スコープを、データベース トランザクション ID またはログ シーケンス番号、およびサービス メソッド名と共に保存して、サービス操作名で cdc の変更を報告できるようにしたいと考えていました。
どんな助けや考えも素晴らしいでしょう!ライアン