代码之家  ›  专栏  ›  技术社区  ›  Filip Ekberg

C中的交易#

  •  8
  • Filip Ekberg  · 技术社区  · 15 年前

    首先,这不是关于数据库事务的文章。我想知道更多关于 TransactionModel 在.NET 2.0及更高版本中。因为我是针对.NET 3.5开发的,所以较新的模型被重视了。

    现在,我想说的是

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

    这意味着当钱小于0时,里面的所有东西 TransactionScope 但是,它不应该被回滚。

    简单测试如下

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

    前提是球场的资金金额为100。

    我是否错过了一些东西,或者这不是事务应该如何工作?使用这个模型的性能损失是什么?

    3 回复  |  直到 15 年前
        1
  •  10
  •   Mark Seemann    15 年前
        2
  •  6
  •   Randy Minder    15 年前

    我认为您对TransactionScope的设计目标感到困惑。TransactionScope旨在提交或回滚所连接数据库中的更改。它不会反转对代码中对象的更改。它不会逆转“金钱”中包含的价值。

    兰迪

        3
  •  3
  •   thr    15 年前
    推荐文章