Probabilmente ti sei imbattuto in questo bug in MySQL Connector/NET .
Cosa fa scattare questo bug:
- Richiami di codice per l'esecuzione della query A
- La transazione 1 per la query A è iniziata
- La query A viene eseguita e causa un errore in MySQL
- La transazione 1 NON viene annullata
- Richiami di codice per l'esecuzione della query B
- La transazione 2 per la query B è iniziata
- MySQL Connector/NET genera l'eccezione
Il bug è il punto 4:la transazione 1 viene lasciata aperta dopo un errore (o almeno il connettore è ancora convinto di essere lasciato aperto). A causa del pool di connessioni, il codice che chiama la query A e la query B può essere completamente non correlato. Inoltre, se il tempo tra il punto 4 e il punto 5 è abbastanza lungo, la transazione è rollback, da qui la rarità e la casualità.
Sfortunatamente non c'è ancora nessuna correzione da MySQL. L'unica soluzione alternativa che conosco è scaricare il codice sorgente di Connector/NET e ripararlo/crearlo da soli.