C# 当TransactionScope和嵌套事务都不受支持时,该怎么办?

C# 当TransactionScope和嵌套事务都不受支持时,该怎么办?,c#,.net,database,transactionscope,nested-transactions,C#,.net,Database,Transactionscope,Nested Transactions,TransactionScope是一个惊人的功能,但是很少有提供商能够正确地实现它。 我不想将连接作为参数传递。可能您正在寻找 基本上,每个事务都被保存(事务的详细信息被保存),如果应用程序崩溃并重新启动,您可以选择停止的位置,或者根据日志状态回滚更改 这里有一个指向的链接,可以帮助您实现系统普及。不确定您希望在此处使用TransactionScope实现什么-如果想法是在方法之间实现自动事务流(以及正在进行的事务中的简单登记),那么将连接作为参数传递并不是唯一的方法。您可以使用current(

TransactionScope是一个惊人的功能,但是很少有提供商能够正确地实现它。 我不想将连接作为参数传递。

可能您正在寻找

基本上,每个事务都被保存(事务的详细信息被保存),如果应用程序崩溃并重新启动,您可以选择停止的位置,或者根据日志状态回滚更改


这里有一个指向的链接,可以帮助您实现系统普及。

不确定您希望在此处使用TransactionScope实现什么-如果想法是在方法之间实现自动事务流(以及正在进行的事务中的简单登记),那么将连接作为参数传递并不是唯一的方法。您可以使用current(或current Thread)传递当前连接和事务。放置一个简单的静态包装器,检查当前调用上下文中是否存在连接/事务,如果不存在,则创建。这是一种透明的非侵入性方式,而不是通过参数传递


现在,如果您正在考虑跨应用程序域边界流动事务和/或使用多个资源管理器(即使用分布式事务),那么最好的选择是使用TransactionScope并推出。当然,这不是一件小事,但这就是需求所包含的内容。如果基础系统不提供事务性资源,则自定义资源管理器可以使用补偿事务进行回滚(例如,文件系统顶部的管理器可以使用“删除文件夹”作为“创建文件夹”原始事务的补偿事务).

我曾考虑使用ThreadStatic变量,但CallContext正是我所需要的!非常感谢VinayC。@Preet Sangha:MySql不支持同一事务中的多个连接。SQL Server 2005错误地升级到MSDTC。Oracle有时会出现一些错误。