Mysql
 sql >> Database >  >> RDS >> Mysql

ASP.NET Web Forms e MySql Entity Framework:le transazioni nidificate non sono supportate

Probabilmente ti sei imbattuto in questo bug in MySQL Connector/NET .

Cosa fa scattare questo bug:

  1. Richiami di codice per l'esecuzione della query A
  2. La transazione 1 per la query A è iniziata
  3. La query A viene eseguita e causa un errore in MySQL
  4. La transazione 1 NON viene annullata
  5. Richiami di codice per l'esecuzione della query B
  6. La transazione 2 per la query B è iniziata
  7. 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.