2017-03-29 3 views
1

J'ai cette erreur lorsque mes transactions sont en conflit. Comment puis-je trouver quelle est la réaction en conflit? (Sans sql server profiler).Transactions en conflit

J'utilise le niveau

d'isolement de capture instantanée System.Data.SqlClient.SqlException: transaction d'isolement de capture instantanée avorté en raison de mettre à jour les conflits. Vous ne pouvez pas utiliser l'isolement de capture instantanée pour accéder à la table 'dbo.Users' directement ou indirectement dans la base de données 'IUMobileDbRelease' pour mettre à jour, supprimer ou insérer la ligne modifiée ou supprimée par une autre transaction. Réessayez la transaction ou modifiez le niveau d'isolation de l'instruction de mise à jour/suppression.

System.Data.Entity.Internal.InternalContext.SaveChanges() 
+0

Vous utilisez SQL Server Profiler. Ou Événements étendus, le remplacement de profiler. Mieux encore, n'utilisez * pas * les transactions. Utilisez la concurrence optimiste à la place. C'est le conseil standard depuis les années 1990. Le code qui utilise des transactions * ne peut pas * évoluer et devra * toujours * gérer les blocages et réessayer. Depuis les années 1990, les applications utilisent des colonnes optimistes de concurrence et de rowversion pour détecter les changements conflictuels * sans * utiliser les transactions –

+0

L'autre option consiste à utiliser le niveau d'isolement de transaction SNAPSHOT au lieu de readable read. C'est plus lent que la simultanéité optimiste mais vous assure que vous n'obtiendrez pas d'interblocages à moins que deux applications tentent de modifier la même ligne –

+0

quelle version du serveur SQL est-elle? considérez ceci: http://stackoverflow.com/a/33272566/1132334 – dlatikay

Répondre