我有一個MySql數據庫,其中有九個表。我需要從C#中的異步作業動態上傳到其中的六個。但是,爲了加速上傳,其中四個使用MySqlBulkLoader
,而另外兩個使用手動上傳方法。爲了支持併發性並防止數據庫中的錯誤,我需要同時上傳它們。爲此,我決定使用交易來確保「全部或全部」類型上傳。MySqlBulkLoader與MySqlCommand在交易
潛藏的問題:MySqlCommand
類允許其Transaction
屬性中通過MySqlTransaction
類的事務支持,並MySqlBulkLoader
允許原子上傳(我用INNODB
發動機,見mysql - Can MySqlBulkLoader be used with a transaction?)。但是,MySqlBulkLoader
創建它自己的原子上傳事務,而另一個單獨的事務將用於MySqlCommand
的我將執行。這不支持序列化,並且如果一個批量加載器完成它的工作,仍然可能導致錯誤,但應用程序在另一個完成之前關閉。如果交易可以嵌套,這將是可以解決的;但是,它們不能:php - Mysql transactions within transactions。
我的問題是:有沒有在C#連接器的任何方式,讓MySqlBulkLoader
與一個MySqlTransaction
相關聯,如果沒有,是否有什麼辦法可以自動回滾由以前MySqlBulkLoader
所做出的改變。我查看了Connector.NET 6.9提供的API,看起來這可能是通過MySqlConnection.BeginTransaction()
方法可能的,但Werner Wolf中的一個問題暗示了其他問題。
編輯
我通過Saravanan發現this question。但是,我不認爲這個問題與MySqlBulkLoader
與MySqlCommand
混合的因素有關。