Wie verwenden von Transaktionen mit dapper.net?
Ich würde gerne mehrere insert-Anweisungen über mehrere Tabellen. Ich bin mit dapper.net. Ich sehe keinen Weg, um Transaktionen mit dapper.net.
Bitte teilen Sie Ihre Ideen auf, wie Transaktionen mit dapper.net.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier der code-snippet:
Beachten Sie, dass Sie brauchen, um Sie auf Verweis hinzufügen, um
System.Transactions
Montage, da Sie nicht referenziert wird standardmäßig.Dispose()
Methode. WennComplete()
wurde nicht genannt, die Transaktion wird ein Rollback ausgeführt.TransctionScope
using-block in den Fall, Sie wählen diese Antwort.Ich lieber ein intuitiver Ansatz, indem Sie die Transaktion direkt aus der Verbindung:
.BeginTransaction()
drauf??? Wenn das der Fall war, diese Erweiterung-Methode fördern würden falsche Verwendung der Transaktion. (IMO sollte es auch werfen kann nicht geöffnet werden "- Transaktion, nachdem die Verbindung ist bereits geöffnet".)Execute
, wie dies erforderlich ist.Sollten Sie in der Lage sein zu verwenden
TransactionScope
seit Dapper läuft gerade ADO.NET Befehle.Unter Berücksichtigung aller Ihrer Tabellen in eine einzige Datenbank, die ich nicht einverstanden mit
TransactionScope
Lösung vorgeschlagen, hier einige Antworten. Finden Sie diese Antwort.TransactionScope
ist in der Regel für verteilte Transaktionen, Transaktion spanning verschiedenen Datenbanken können auf verschiedenen system. Dies muss einige Konfigurationen am Betriebssystem und SQL-Server, ohne die diese nicht funktionieren. Dies ist nicht empfohlen, wenn alle Ihre Anfragen werden gegen einzelne Instanz der Datenbank aus.Aber mit der single Datenbank dies kann nützlich sein, wenn Sie brauchen, um den code der Transaktion, die nicht unter Ihrer Kontrolle. Mit der single Datenbank braucht es keine speziellen Konfigurationen, die entweder.
connection.BeginTransaction
ist ADO.NET syntax zur Umsetzung der Transaktion (in C# VB.NET etc.) gegen single Datenbank. Dies funktioniert nicht über mehrere Datenbanken.So,
connection.BeginTransaction()
besser ist Weg zu gehen.Sogar der bessere Weg zur Abwicklung der Transaktion ist die UnitOfWork implementieren, wie in diese Antwort.
TransactionScope
was nicht effizient ist, was der OP will. Ich bin damit einverstanden, dassTransactionScope
ist gutes Werkzeug, in vielen Fällen, aber nicht für dieses.Daniel ' s Antwort wie erwartet funktionierte für mich. Der Vollständigkeit halber, hier ein Codeausschnitt, der zeigt, commit-und rollback-mit einem Transaktionsbereich und dapper:
Dispose
Methode wird aufgerufen, ersten oder zweiten, nur, dass es zweimal angerufen. Zu dem Punkt, dass "den Aufruf von dispose ein zweites mal ist nicht schädlich", das ist eine große übernahme. Ich habe gelernt, dass die docs und den tatsächlichen Implementierungen oft nicht einverstanden. Aber wenn Sie möchten Microsoft word für Sie: msdn.microsoft.com/en-us/library/...