2010-01-07 16 views
8

Przede wszystkim nie będzie to post o transakcjach baz danych. Chcę wiedzieć więcej o TransactionModel w .NET 2.0 i nowszych. Odkąd pracuję przeciwko .NET 3.5 nowsze modele są uznawane.Transakcje w C#

Teraz, co chciałbym acheive jest czymś następującym

public void Withdraw(double amount) 
    { 
     using (TransactionScope scope = new TransactionScope()) 
     { 
      Money -= amount; 

      if (Money > 0) 
       scope.Complete(); 
     } 
    } 

co oznaczałoby, że gdy pieniędzy jest mniej niż 0, wszystko wewnątrz TransactionScope powinny być RolledBack, jednak tak nie jest.

Prosty test jak następuje

 ImportantObject obj = new ImportantObject(1); 

     Console.WriteLine(obj.Money); 

     obj.Withdraw(101); 

     Console.WriteLine(obj.Money); 

warunkiem że kwota Stadard Pieniądze 100.

Czy brakuje czegoś tutaj lub jest to nie jak transakcje powinny pracować? A jakie są straty wydajności za pomocą tego modelu?

Odpowiedz

6

Myślę, że nie masz pojęcia, do czego służy TransactionScope. TransactionScope jest przeznaczony do zatwierdzania lub wycofywania zmian w bazie danych, z którą jesteś połączony. Nie odwraca zmian do obiektów w kodzie. Nie spowoduje to odwrócenia wartości zawartej w "Pieniądzu".

Randy