我在我的 wcf 服务中使用 TransactionScope 类将我的 wcf 服务中的任何数据库操作分组到一个事务中。我也在使用 sql server 更改数据捕获来捕获有关表的所有更改。
我希望能够将所有数据库 cdc 更改报告回创建我的事务范围的原始服务操作。
假设我有一个名为 SavePolicy 的服务操作,它实际上在一个事务范围内执行 3 个数据库更新。在该范围内,我可以使用如下代码获取交易 ID:
TransactionInformation info = Transaction.Current.TransactionInformation;
transactionId = Guid.Empty == info.DistributedIdentifier ? info.LocalIdentifier : info.DistributedIdentifier.ToString();
这个 id 是否存储在 sql server 中的任何地方?我正在使用 Entity Framework 和存储过程来执行常规的 crud 操作。
我可以使用 fn_cdc_get_all_changes_ 等 cdc 函数获取所有更改数据,并且 cdc.lsn_time_mapping 表中有一个事务 ID,但看起来这不是同一回事。
我希望我可以存储 c# 事务范围以及数据库事务 ID 或日志序列号和服务方法名称,以便我可以按服务操作名称报告 cdc 更改。
任何帮助或想法都会很棒! 瑞安
最佳答案
提交事务时,事务 ID 不会存储在 sql server 中。这听起来更像是应用程序需要一些额外的跟踪,而数据模型没有该信息。
关于c# - 将 TransactionScope TransactionInformation 事务标识符与 sql server 事务 ID 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195936/