C#中的事务处理

8

首先,这不是一篇关于数据库事务的文章。我想更多地了解.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内的所有内容应该被回滚,但事实并非如此。
以下是一个简单的测试。
        ImportantObject obj = new ImportantObject(1);

        Console.WriteLine(obj.Money);

        obj.Withdraw(101);

        Console.WriteLine(obj.Money);

假设标准货币金额为100。

我是否遗漏了什么,或者这不是交易应该运作的方式?并且使用此模型会有什么性能损失?

3个回答

10

6

我认为你对TransactionScope的设计目的存在困惑。TransactionScope旨在提交或回滚您连接的数据库中的更改,它不会撤销代码中对象的更改,并且也不会撤销'Money'中包含的值。

Randy


3

看起来这就是我一直在寻找的。谢谢。 - Filip Ekberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接