Транзакции в C # - PullRequest
       34

Транзакции в C #

8 голосов
/ 07 января 2010

Прежде всего, это не будет пост о транзакциях с базой данных. Я хочу узнать больше о 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 должно быть RolledBack, однако это не так.

Простой тест, как следует

        ImportantObject obj = new ImportantObject(1);

        Console.WriteLine(obj.Money);

        obj.Withdraw(101);

        Console.WriteLine(obj.Money);

При условии, что сумма стандартных денег равна 100.

Я что-то упустил здесь или это не так, как транзакции должны работать? И каковы потери производительности при использовании этой модели?

Ответы [ 3 ]

10 голосов
/ 07 января 2010
6 голосов
/ 07 января 2010

Я думаю, вы не понимаете, для чего предназначен TransactionScope. TransactionScope предназначен для фиксации или отката изменений в базе данных, к которой вы подключены. Он не отменяет изменения объектов в коде. Это не изменит значение, содержащееся в «Деньгах».

Randy

3 голосов
/ 07 января 2010

То, что вы ищете, называется STM, Software Transactional Memory. Проверить http://research.microsoft.com/en-us/downloads/6cfc842d-1c16-4739-afaf-edb35f544384/default.aspx

...