Ich habe eine MySql-Datenbank mit neun Tabellen darin. Ich muss zu sechs von ihnen dynamisch von einem asynchronen Auftrag innerhalb C# hochladen. Um jedoch den Upload zu beschleunigen, verwenden vier von ihnen MySqlBulkLoader
, während die anderen beiden eine manuelle Upload-Methode verwenden. Um Nebenläufigkeit zu unterstützen und Fehler in der Datenbank zu vermeiden, muss ich sie alle gleichzeitig hochladen. Um dies zu tun, habe ich beschlossen, Transaktionen zu verwenden, um sicherzustellen, dass ein "Alles oder nichts" -Typ hochgeladen wird.MySqlBulkLoader mit MySqlCommand In der Transaktion
Darin liegt das Problem: die MySqlCommand
Klasse für Transaktionsunterstützung über die MySqlTransaction
Klasse ermöglicht es innerhalb seiner Transaction
Eigenschaft und die MySqlBulkLoader
ermöglicht Atom Upload (ich benutze INNODB
für den Motor, siehe mysql - Can MySqlBulkLoader be used with a transaction?). Die MySqlBulkLoader
erstellt jedoch eine eigene Transaktion für den atomaren Upload, während eine andere separate Transaktion für die MySqlCommand
's ausgeführt wird, die ich ausführen werde. Dies unterstützt die Serialisierung nicht und kann immer noch zu Fehlern führen, wenn ein Bulk Loader seinen Job abschließt. Die Anwendung wird jedoch geschlossen, bevor eine andere beendet werden kann. Dies wäre lösbar, wenn Transaktionen verschachtelt werden könnten; sie können jedoch nicht: php - Mysql transactions within transactions.
Meine Fragen ist wie folgt: Gibt es eine Möglichkeit in dem C# Anschluss der MySqlBulkLoader
wird in Verbindung mit einem MySqlTransaction
, und wenn nicht zu erlauben, wenn es eine Möglichkeit ist, um automatisch Änderungen von früheren MySqlBulkLoader
s gemacht Rollback. Ich habe in der API von Connector.NET 6.9 geschaut, und es scheint, dass dies möglicherweise über die MySqlConnection.BeginTransaction()
Methode möglich ist, aber eine Frage von Werner Wolf schlägt anders vor.
EDIT
fand ich this question von Saravanan. Ich glaube jedoch nicht, dass sich diese Frage auf den Faktor MySqlBulkLoader
mit der MySqlCommand
bezieht.