0

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

4

2 回答 2

1

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

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

于 2010-10-04T07:30:17.360 回答
0

也许您正在寻找System Prevalence

基本上,每个事务都会被记录(保存事务的详细信息),如果应用程序崩溃并重新启动,您可以从上次中断的地方继续,或者根据记录的状态回滚更改。

这是一个快照模式的链接,它可以帮助您实施系统流行度。

于 2010-10-04T00:05:24.867 回答