C# - System.Transactions.TransactionScope

jon*_*ers 14 .net c# transactions transactionscope

我对TransactionScope类感到好奇.

在大多数情况下,我认为它是用于数据库连接(这是我用过的).

我的问题是,您是否可以将任何代码放在TransactionScope的使用块中以使其成为事务性的?MS文档不清楚.

如果它可用于制作除数据库连接以外的代码事务,那么支持哪些代码?如果它可以使System.IO.File操作事务性,那对我来说似乎很疯狂.

Vit*_*sky 13

TransactionScope不仅适用于数据库.实现IEnlistmentNotification接口的每个组件都可以参与事务范围的两阶段提交.

以下是事务性内存存储的示例:http: //www.codeproject.com/KB/dotnet/Transactional_Repository.aspx

此外,我不确定.NET中是否存在用于事务性文件IO的组件,但是实现这样的组件非常容易 - 像Vista和Windows Server 2008这样的最新操作系统支持事务文件IO.

  • 仅供参考,微软正在考虑自嘲事务NTFS http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx (2认同)

Jef*_*nal 6

不,你不能通过在一个内部运行任意代码事务TransactionScope.

正如您在评论中所指出的,System.Transactions命名空间提供了基础结构类,以帮助创建任何资源事务.默认情况下,.NET为您链接的命名空间简介(在注释中)列出的几种操作提供资源管理器支持:"SQL Server,ADO.NET,MSMQ和Microsoft分布式事务处理协调器(MSDTC)".

事实证明,支持文件系统事务 - 虽然我只能找到NTFS(使用文件系统事务增强您的应用程序).但是,对于我的钱,该代码可能会严重使用外观.;)也许还有其他更通用的实现(或许不是 - 使文件IO事务可能需要NTFS提供的额外基础结构).

还有大量正在进行的关于对内存状态事务进行更改的研究,称为软件事务内存.Microsoft DevLabs提供了一个实现:STM.NET.