2

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 の変更を報告できるようにしたいと考えていました。

どんな助けや考えも素晴らしいでしょう!ライアン

4

1 に答える 1

0

トランザクションがコミットされると、トランザクション ID は SQL Server に格納されません。アプリケーションが追加の追跡を必要としているように思えますが、データ モデルにはその情報がありません。

于 2014-01-18T03:00:05.580 に答える