2010-04-29 3 views
0

J'ai deux services en communication avec deux Data-store différents (c'est-à-dire SQL). J'utilise TransactionScope: par exemple:Verrou de table d'insertion SQL WCF Transaction Scope

using(TransactionScope scope = new TransactionScope()) 
{ 
    service1.InsertUser(user);//Insert to SQL Service 1 table User 
    service2.SavePayment(payment);//Save payment SQL Service 2 table payment 
    scope.Complete(); 
} 

Service1 verrouille la table (utilisateur) jusqu'à ce que la transaction soit complétée effectuer des transactions ultérieures avec ce séquentielle de table. Y at-il un moyen de surmonter le verrou, peut donc avoir plus d'un appels simultanés à la table SQL service1 pendant que le code ci-dessus est en cours d'exécution?

J'apprécierais toute contribution.

Merci à l'avance.

Lihnid

+0

@lihnid, je pense que je vous ai conduit ici mal ... mon mauvais. Snapshot Isolation ne peut pas être utilisé car vous utilisez des transactions distribuées. http://msdn.microsoft.com/en-us/library/ms179599.aspx. Utilisez-vous SQL Server 2005 ou 2008? –

+0

Salut Tuzo, merci pour la réponse, Iam en utilisant SQL 2005. – lihnid

Répondre

0

Je suppose que vous pourriez avoir sur votre déclencheurs utilisateur ou d'une table de paiement qui mettent à jour l'autre.

Le scénario le plus probable est que votre sauvegarde effectue probablement certaines sélections, ce que vous ne pouvez pas faire dans le même proc où vous insérez. Cela provoque trop de verrouillage. Déterminez si vous avez besoin d'insérer avec un appel distinct à la base de données, en utilisant une nouvelle option inside et suppress de transactioncope, en supprimant le select de la transaction. Je sais que votre sélection aurait le nolock, mais il semble être ignoré dans SQL 2005 par rapport aux versions plus anciennes. J'ai eu ce même problème.

Rendez tous vos appels aussi simples que possible.

Questions connexes