c# - 将 TransactionScope TransactionInformation 事务标识符与 sql server 事务 ID 链接起来

标签 c# sql-server transactions transactionscope cdc

我在我的 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/

相关文章:

database - 中止和回滚之间的区别?

transactions - 事务中Partially Committed和Committed State有什么区别?

C# FatClient Facebook 身份验证失败 : Return URI contains no token

c# - 在 C# 中检查文件系统监视器

mysql - SQL - 将分开的表中的 2 列合并为 1 列(不是 concat)

mysql - 连接 2 个表,其列标题全部相同,但其中一个不同

java - 在 EJB 中处理 TransactionTimeout 异常

c# - 如何使用 c# 和 Google API 在 Google 日历中创建事件?

c# - Linq 或存储过程 - 我应该选择哪一个?

sql-server - 尝试将 FoxPro DBF 文件导入 SQL Server