C#中的交易

首先,这不是关于数据库事务的post。 我想更多地了解.NET 2.0及更高版本中的TransactionModel 。 由于我正在针对.NET 3.5进行开发,因此新版本的应用程序会受到关注。

现在,我想要实现的是以下内容

public void Withdraw(double amount) { using (TransactionScope scope = new TransactionScope()) { Money -= amount; if (Money > 0) scope.Complete(); } } 

这意味着当Money小于0时, TransactionScope内的所有内容都应该是RolledBack,但事实并非如此。

一个简单的测试如下

  ImportantObject obj = new ImportantObject(1); Console.WriteLine(obj.Money); obj.Withdraw(101); Console.WriteLine(obj.Money); 

前提是Stadard Money金额为100。

我在这里错过了什么,或者这不是交易应该如何运作的? 使用这个模型会有什么性能损失?

您可能希望阅读.NET中的易失性资源管理器:由Juval Lowy 将事务引入公共类型 。

我认为你对TransactionScope的设计目的感到困惑。 TransactionScope旨在提交或回滚您连接到的数据库中的更改。 它不会反转代码中对象的更改。 它不会反转’Money’中包含的值。

兰迪

您所追求的是STM,Software Transactional Memory。 查看http://research.microsoft.com/en-us/downloads/6cfc842d-1c16-4739-afaf-edb35f544384/default.aspx