2011-03-10 11 views
24

Zastanawiasz się, jeśli chcę utworzyć klasę, która coś robi i chcę być w stanie użyć w TransactionScope, co powinienem zaimplementować?Jak utworzyć klasę współpracującą z programem TransactionScope?

To znaczy: Moja klasa musi wiedzieć, że jest w transakcji, ale w jaki sposób otrzyma powiadomienie o zatwierdzeniu lub wycofaniu? A w Rollback, w jaki sposób faktycznie Rollback?

Zakładam, że moja klasa będzie miała metody takie jak "Dodaj", "Aktualizuj" i "Usuń", które modyfikują tylko tymczasową listę zmian, oraz metodę "Odczyt", która musi wykryć, czy jest w transakcji i zwrócić odpowiednio zmodyfikowane lub niezmodyfikowane dane, ale czy potrzebuję metody Commit/Rollback, która zostanie wywołana w jakiś sposób?

Czy mogę zasubskrybować wydarzenie Transaction.TransactionCompleted? Jeśli tak, w jaki sposób uniknąć wielu subskrypcji do tej samej transakcji?

Zauważyłem, że transakcje nie mają identyfikatorów, czy istnieje sposób zarządzania/żonglowania wieloma jednoczesnymi transakcjami lub zagnieżdżonymi transakcjami?

Dokumentacja MSDN dla System.Transactions ma dużo treści, ale wydaje się być skierowana raczej do konsumentów niż do implementatorów, więc zastanawiam się, czy ktoś ma dobre źródło (w Internecie lub w książce), jak usługa zapewnić obsługę transakcji?

Załóżmy, że moja klasa nie ma sklepu bazowego, który obsługuje już transakcje i jest w stanie po prostu "przepuścić". Załóżmy, że moja klasa wygląda następująco:

public class MyClass { 
    private List<MyObject> _businessData; 

    public void Create(Myobject data) { ... } 
    public MyObject Read(string query) { ... } 
    public void Update(Myobject data) { ... } 
    public void Delete(Myobject data) { ... } 
} 

Odpowiedz

14

This article ma dobry przegląd tego, co jest wymagane. Jest starszy, ale uważam, że wszystko nadal obowiązuje.

Podsumowując artykuł, należy wywołać jedną z metod Enlist na klasie Transaction, przekazując implementację IEnlistmentNotification.

+0

A jeśli ktoś się zastanawiał, to był link nr 4 do wpisania "uczestnictwa w System.Transaction" –

+1

Dzięki. Artykuł jest dobrym przeglądem, ale niezbyt głęboki (np. Jak sprawdzić, która transakcja jest podejmowana w przypadku, gdy obsługuję wiele równoczesnych transakcji). Ale Menedżer zasobów jako słowo kluczowe pomógł mi znaleźć artykuły takie jak http://msdn.microsoft.com/en-us/magazine/cc163688.aspx, które wypełniają luki. –

Powiązane problemy