IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Linq To Sql - Question à propose des transactions scopes


Sujet :

Linq

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut Linq To Sql - Question à propose des transactions scopes
    Bonjour,

    J'ai une question qui me turlupine à propos des transactions scopes. Alors j'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                        using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }))
                        {
                            using (var dematbase = DataContextFactory.CreateInvoicesDataContext())
                            {
                                dematbase.CloseInvoice(Id);
                            }
     
                            HistoryManager.Add(...);
     
                            scope.Complete();
                        }

    La méthode Add de HistoryManager :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    internal static void Add(DocumentType documentType, long documentId,
                DocumentActions documentAction, CircuitItemTypes circuitItemType,
                string comment,
                CircuitItem circuitItem,
                Guid user)
            {
                using (var scope = new TransactionScope(TransactionScopeOption.Suppress, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
                {
                    if (documentType == DocumentType.Invoice)
                    {
                        using (var db = DematDataContextFactory.CreateInvoicesDataContext())
                        {
                            db.InvoiceHistory_Insert(
                                documentId,
                                user,
                                (int)documentAction,
                                (int)circuitItemType,
                                comment,
                                circuitItem == null ? (int?)null : circuitItem.ItemLevel,
                                circuitItem == null ? (int?)null : circuitItem.ItemStep);
                        }
                    }
                    else
                    {
                        using (var db = DematDataContextFactory.CreateStatusDataContext())
                        {
                            db.StatusHistory_Insert(documentId,
                                user,
                                (int)documentAction,
                                (int)circuitItemType,
                                comment,
                                circuitItem == null ? (int?)null : circuitItem.ItemLevel,
                                circuitItem == null ? (int?)null : circuitItem.ItemStep);
                        }
                    }
     
                    scope.Complete();
                }
            }


    Je voudrais savoir si vous connaissez le comportement du code si HistoryManager.Add() vient à échouer ? Est-ce que CloseInvoice() fait un rollback ?

    Car depuis que nous utilisons du code de ce genre là nous avons des exceptions étranges que voici :

    07/02/2013 12:23:06 - Error - Void ReceiveTransaction(UInt32, Byte[], IntPtr, System.Guid ByRef, System.Transactions.Oletx.OletxTransactionIsolationLevel ByRef, System.Transactions.Oletx.ITransactionShim ByRef) - 'VFAC201108183510' logged: Erreur lors de la mise en paiement : X5G66YO
    Message : Communication with the underlying transaction manager has failed.
    Source : System.Transactions
    TargetSite :System.Transactions.Oletx.OletxTransaction GetOletxTransactionFromTransmitterPropigationToken(Byte[])
    En outre, l'application comporte aussi du code comme celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    usig(Mycontext) {
    Mycontext.Doit();
    HistoryManager.Add();
    }

    Il peut donc arriver que deux instances du context X soient imbriquées.

    Avez-vous déjà eu ce cas ? Et vaut-il mieux démêller ce plat de spaghetti ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Bonjour,

    Voici un liens qui peut répondre à ton problème http://social.msdn.microsoft.com/For...-c73464f59606/

Discussions similaires

  1. Linq to Sql Mise à jour des Vues
    Par Muller Guy dans le forum Linq
    Réponses: 3
    Dernier message: 17/06/2010, 15h53
  2. [LINQ TO SQL] ajout attributs à des classes avec le concepteur
    Par sdicay dans le forum Framework .NET
    Réponses: 0
    Dernier message: 09/03/2010, 20h37
  3. LINQ To SQL : Question design
    Par cobolfingaz dans le forum C#
    Réponses: 4
    Dernier message: 22/01/2009, 14h32
  4. [débutant] Questions sur le Transact-SQL
    Par nagty dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 05/07/2005, 17h43
  5. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo