Quand “SqlConnection ne prend pas en charge parallèle transactions” arriver?
J'ai une tonne de code de travail qui a été ici pendant des mois et aujourd'hui j'ai vu l'exception suivante enregistré:
System.InvalidOperationException
SqlConnection does not support parallel transactions.
at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(
IsolationLevel iso, String transactionName)
at System.Data.SqlClient.SqlConnection.BeginTransaction(
IsolationLevel iso, String transactionName)
at my code here
et j'aimerais comprendre pourquoi cette exception a été levée. J'ai lu MSDN description de BeginTransaction()
et tout ce qu'elle dit, c'est que bien, parfois, cette exception peut être lancée.
Ce n'cette exception veux dire exactement? Qu'est-ce que la lacune dans mon code que je devrais être à la recherche d'?
- Êtes-vous utilisation régulière SqlConnection/SqlCommmand/SqlDataAdapter ou êtes-vous d'utiliser un ORM (tel que EF ou L2 ou autres)? Et le code à l'aide de transactions explicites ou TransactionScopes? Aussi, pouvez-vous poster un exemple de code autour de l'erreur d'enregistrement/de jeter de l'exception?
- Cochez cette réponse: stackoverflow.com/questions/407320/... Il est sur le même problème.
- Si je pouvais limiter le problème je ne voudrais pas poser cette question. Je ne demande pas "mon code ne fonctionne pas, s'il vous plaît aider le plus vite possible", je me demande ce que je dois regarder dans mon code.
- Afin de cerner le problème, utilisez-vous régulièrement SqlConnection/SqlCommmand/SqlDataAdapter ou êtes-vous d'utiliser un ORM (tel que EF ou L2 ou autres)? Et le code à l'aide de transactions explicites ou TransactionScopes?
- Le code utilise SQL??? choses directement, sans aucun middleware et il utilise SqlTransaction pour les transactions.
Vous devez vous connecter pour publier un commentaire.
Vous obtiendrez ce si la connexion a déjà une transaction non validée et que vous appelez BeginTransaction de nouveau.
Dans cet exemple:
... J'ai exactement le même exception à la deuxième BeginTransaction.
Assurez-vous que la première transaction est validée ou annulée avant la prochaine.
Si vous voulez les transactions imbriquées, vous pouvez trouver TransactionScope est la voie à suivre.
Le même problème se produit lors de l'utilisation de la "mauvaise" méthode pour effectuer une transaction, ce qui est arrivé après que nous avons mis à niveau vers une version plus récente de l'Entity Framework.
Dans le passé, nous avons été à l'aide de la méthode suivante pour créer une transaction et mixtes EF fort tapé des requêtes linq avec des requêtes Sql, mais depuis le
Connection
propriété n'existe plus, nous avons remplacé tous lesdb.
avecdb.Database
, ce qui est faux:Quelque part, ils ont changé le comportement de la méthode de transaction comportement avec une version plus récente de l'Entity Framework et la solution est d'utiliser:
Avis que la transaction est maintenant callen sur
Database
au lieu deConnection
.