Mysql
 sql >> Base de données >  >> RDS >> Mysql

Formulaires Web ASP.NET et MySql Entity Framework :les transactions imbriquées ne sont pas prises en charge

Vous avez probablement rencontré ce bogue dans MySQL Connector/NET .

Qu'est-ce qui déclenche ce bogue :

  1. Le code appelle l'exécution de la requête A
  2. La transaction 1 pour la requête A est démarrée
  3. La requête A est exécutée et provoque une erreur dans MySQL
  4. La transaction 1 n'est PAS annulée
  5. Le code appelle l'exécution de la requête B
  6. La transaction 2 pour la requête B est démarrée
  7. MySQL Connector/NET lève l'exception

Le bogue est le point 4 :la transaction 1 est laissée ouverte après une erreur (ou du moins le connecteur est toujours convaincu qu'il est laissé ouvert). En raison du regroupement des connexions, le code appelant la requête A et la requête B peut être totalement indépendant. De plus, si le temps entre les points 4 et 5 est suffisamment long, la transaction est annulé, d'où la rareté et le caractère aléatoire.

Malheureusement, il n'y a pas encore de solution par MySQL. La seule solution de contournement que je connaisse est de télécharger le code source de Connector/NET et de le réparer/construire vous-même.