Dies steht im Zusammenhang mit der Nested Database transactions in C#.Kann ich SqlConnection.BeginTransaction und TransactionScope mischen?
Die Objekte in der Sammlung, die ich in der Transaktion übernehmen möchte, implementieren ihre eigenen Transaktionen mit der Methode SqlConnection.BeginTransaction.
Nach dem Lesen dieser post bin ich nicht sicher, ob ich diese auch mischen kann oder nicht. Ich verwende SQL Server 2005 und jedes Objekt verwendet Verbindungsdetails aus der statischen Konfigurationsklasse.
Hat jemand Erfahrung damit?
Hier ist der Beispielcode ist:
using(TransactionScope scope = new TransactionScope())
{
for (int i=0; i<=1000....)
{
SqlConnection con = new SqlConnection()
SqlCommand cmd = new SqlCommand("delete from ...", con);
try {
con.Open();
DbTransaction t = con.BeginTransaction();
cmd.ExecuteNonQuery();
...
cmd.CommandText = .... ;
cmd.ExecuteNonQuery();
t.Commit ...
}
catch {
t.Rollback ...
}
con.Close()
}
}
Thx
Sie sollten Ihre Antwort als Antwort auf diese Frage markieren - es ist erlaubt! – Fenton
In meinem Fall haben wir "Unit" -Tests, die in TransactionScope verpackt sind, so dass wir auf unseren Entwicklungsmaschinen komplexe Datenbankmanipulationen durchführen können, ohne für jede Test- und Testklasse darüber nachzudenken und alles [theoretisch] rückgängig zu machen. Zur gleichen Zeit möchten wir nicht unbedingt MS DTC-Nutzung auf den Produktionsservern, und ich wollte ein paar gemeinsame Entity Framework-Manipulationen in einer regulären Transaktion wickeln, so dass die gesamte Operation Rollback kann, wenn einer davon fehlschlägt ... Im Idealfall sollte das TransactionScope weiterhin funktionieren und die innere Transaktion sollte auch ... – bambams