C# 在.NET中提交事务或回滚时获取信息。任何交易

C# 在.NET中提交事务或回滚时获取信息。任何交易,c#,sql-server,sqltransaction,C#,Sql Server,Sqltransaction,我正在为我的程序设计一个日志系统,我需要知道系统中的任何事务何时提交或回滚。因为我从一个地方打开连接,也从一个地方开始事务,所以我已经介绍了“开始事务”,但无法回滚 请注意,我完全控制打开和提交事务,可以轻松地将其记录在那里,但我认为这不是一个好的设计,因为从那时起,程序员将不得不担心记录每个提交或回滚 除了实现我自己的IConnection和IDbTransaction之外,什么是最好的解决方案?使用扩展事件记录所有事情。以下脚本记录回滚,但您可以添加Begin Transaction事件或任

我正在为我的程序设计一个日志系统,我需要知道系统中的任何事务何时提交或回滚。因为我从一个地方打开连接,也从一个地方开始事务,所以我已经介绍了“开始事务”,但无法回滚

请注意,我完全控制打开和提交事务,可以轻松地将其记录在那里,但我认为这不是一个好的设计,因为从那时起,程序员将不得不担心记录每个提交或回滚


除了实现我自己的IConnection和IDbTransaction之外,什么是最好的解决方案?

使用扩展事件记录所有事情。以下脚本记录回滚,但您可以添加Begin Transaction事件或任何其他内容:

CREATE EVENT SESSION [rollback] ON SERVER 
ADD EVENT sqlserver.rollback_tran_completed,
ADD EVENT sqlserver.rollback_tran_starting 
ADD TARGET package0.event_file(SET filename=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
然后,您可以使用以下工具查询结果:

SELECT * FROM sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\rollback.xel', null, null, null)

我会更新我的答案。我在寻找解决方案。我不希望将此记录到数据库中。