2009-06-02 20 views
0

Ich habe gerade mit Transactions in .NET begonnen und ich habe ein Problem. In einer Funktion (in meiner DAL) verwende ich einen Transaktionsumfang. Am Ende der Funktion trigger ich die Complete() Funktion.Transactions .NET

Jetzt habe ich einen Test für diese Funktion, die auch einen Transaktionsbereich verwendet. Am Ende dieser Testfunktion trigger ich die complete() -Funktion nicht, so dass mein Test die Datenbank nicht mit Testdaten füllt. Das scheint gut zu funktionieren.

Mein Problem ist jetzt, dass, wenn ich in meiner Testfunktion complete() trigne, die Transaktion scheint zweimal abgeschlossen. Dies erscheint logisch, da ich Complete() zweimal trigne ... aber gibt es eine Möglichkeit, dies zu vermeiden? Gibt es eine Möglichkeit, die Complete() - Funktion zweimal auszulösen, ohne den Bereich zweimal auszuführen ... Sicher, es muss eine Möglichkeit geben, Transaktionen zu verschachteln ...?

Antwort

0

Mein Verständnis ist, dass wenn Sie Dispose ohne Aufruf Complete die Transaktion gerollt wird, auch TransactionScope supports nested transactions. Mix and match und Sie sollten in der Lage sein, die gesamte Arbeit Ihrer Tests rückgängig zu machen.

0

Versuchen Sie, Ihre innere Transaction mit der RequiresNew Option erstellen:

new TransactionScope(TransactionScopeOption.RequiresNew) 
+0

Thx, ich werde zuerst in diese verschachtelten Transaktionen und die TransactionScopeOption schauen. Ich habe die RequiresNew versucht, die mein vorheriges Problem löst, aber das wirft neue Probleme auf. –