C# – System.Transactions.TransactionScope

我对TransactionScope类感到好奇。

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

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

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

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

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

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

不,您不能通过在TransactionScope运行任意代码TransactionScope

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

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

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