2014-01-17 29 views
2

我在我的wcf服务中使用TransactionScope类将我的wcf服务中的任何数据库操作分组到一个事务中。我很使用sql server更改数据捕获来捕获有问题表上的所有更改。链接TransactionScope TransactionInformation事务标识符与sql服务器事务ID

我希望能够报告所有数据库cdc更改回到我的事务范围创建的原始服务操作。

所以说我有一个名为SavePolicy的服务操作,它实际上是在一个事务范围内更新3个数据库。在该范围内,我可以使用以下代码获得交易ID:

TransactionInformation info = Transaction.Current.TransactionInformation;     
transactionId = Guid.Empty == info.DistributedIdentifier ? info.LocalIdentifier : info.DistributedIdentifier.ToString(); 

此ID是否存储在SQL Server的任何位置?我正在使用实体框架和存储过程来定期进行crud操作。

我可以使用cdc函数(如fn_cdc_get_all_changes_)获取所有更改数据,并且cdc.lsn_time_mapping表中有一个事务ID,但它看起来不是这样的。

我希望我可以存储c#事务范围以及数据库事务ID或日志序列号和服务方法名称,以便我可以通过服务操作名称报告cdc更改。

任何帮助或想法都会很棒! Ryan

回答

0

事务提交时,事务标识未存储在sql server中。这听起来更像是应用程序想要一些额外的跟踪,而数据模型没有这些信息。

+0

是的,我正在尝试创建该信息。实际上,我们已经在我们自己的表格以及cdc中手动存储了交易历史。事实上,我们的DataWareHouse消费增加了CDC。我希望在更新时应用程序可以存储事务和操作名称,将其链接到CDC数据,而不是添加其他历史记录。要报告,我们稍后将查找交易号码并将其加入cdc。 – quigley