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

Accès aux données Discussion :

[Linq to SQL] Transactions sur plusieurs DataContext


Sujet :

Accès aux données

  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut [Linq to SQL] Transactions sur plusieurs DataContext
    Bonjour,

    J'aimerai gérer une transaction sur différents niveaux de dataContext
    (en fait pour le gérer sur 2 DAL).

    j'ai vu que sur un seul datacontext on pouvait faire comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (MyDataContext db = new MyDataContext())
        using (TransactionScope ts = new TransactionScope())
        {
     
        }
    Mais qu'en est il lorsque l'on travail sur 2 objets datacontext ? (un insert dans un coin et un autre dans un autre).

    Merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Bon j'ai réussi il suffit de construire les 2 DataContext avec le même objet de connexion.

    Pour le moment j'utilise l'objet connexion du premier objet dans le 2eme mais cela ne m arrange pas car je doit forcement faire une requete sur mon premier DAL pour qu'il ai un objet connexion et pouvoir le donner a mon 2eme DAL.

    Mon objet mère des DAL :

    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
    protected DbConnection _Connection;
     
    public DbConnection Connection
    {
        get { return _Connection; }
        set { _Connection = value;}
     
    protected RegstupDataContext GetContext()
    {
        return GetContext(true);
    }
     
    protected RegstupDataContext GetContext(bool objectTrackingEnabled)
     {
        RegstupDataContext db;
        if (_Connection == null)
        {
            db = new RegstupDataContext { ObjectTrackingEnabled = objectTrackingEnabled };
            db.Connection.Open();
            _Connection = db.Connection;
        }
        else
        {
            db = new RegstupDataContext(_Connection) { ObjectTrackingEnabled = objectTrackingEnabled };
        }
        return db;
    }

    Avec cela ce code fonctionne :

    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
    using (var ts = new TransactionScope())
    {
        Address address = new Address
        {
            City = city,
            Number = number,
            Street = street,
            ZipCode = zipcode
        };
     
        AddressDAL.Create(address);
     
        EntityDAL entityDAL = new EntityDAL { Connection = AddressDAL.Connection };
        Entity entity = new Entity
        {
            Name = name,
            Profession = profession,
            AddressID = address.ID
        };
     
        entityDAL.Create(entity);
     
        ts.Complete();
        return entity;
    }
    Mais pas celui ci :

    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
    using (var ts = new TransactionScope())
    {
        Address address = new Address
        {
            City = city,
            Number = number,
            Street = street,
            ZipCode = zipcode
        };
     
        EntityDAL entityDAL = new EntityDAL { Connection = AddressDAL.Connection };//la conexion est nul car le DAL jamais utilisé
        Entity entity = new Entity
        {
            Name = name,
            Profession = profession,
            AddressID = address.ID
        };
     
        AddressDAL.Create(address);
        entityDAL.Create(entity);
     
        ts.Complete();
        return entity;
    }
    Ce genre de dépendance m'embête ... si vous avez des idées pour améliorer le code ...
    L'idéal serai de créer un objet de connexion sans avoir a instancier le context mais je ne sais pas si c'est possible...

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Bon bin je me fait une proposition ca intéressera ptetre quelqu'un

    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
    using (var ts = new TransactionScope())
    {
        EntityDAL entityDAL = new EntityDAL(AddressDAL);
     
        Address address = new Address
        {
            City = city,
            Number = number,
            Street = street,
            ZipCode = zipcode
        };
     
     
        AddressDAL.Create(address);
     
        Entity entity = new Entity
        {
            Name = name,
            Profession = profession,
            AddressID = address.ID
        };
     
     
        entityDAL.Create(entity);
     
        ts.Complete();
        return entity;
    }


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public class BaseDAL
    {
        private BaseDAL _RefDAL;
     
        private DbConnection _Connection;
     
        public BaseDAL RefDAL
        {
            get { return _RefDAL; }
            set { _RefDAL = value; }
        }
     
        public DbConnection Connection
        {
            get { return _Connection; }
            set { _Connection = value; }
        }
     
        protected RegstupDataContext GetContext()
        {
            return GetContext(true);
        }
     
        public BaseDAL(){}
     
        public BaseDAL(BaseDAL refDAL) : this()
        {
            _RefDAL = refDAL;
        }
     
        protected RegstupDataContext GetContext(bool objectTrackingEnabled)
         {
            RegstupDataContext db;
     
            if (_RefDAL != null) _Connection = _RefDAL.Connection;
     
            if (_Connection == null)
            {
                db = new RegstupDataContext { ObjectTrackingEnabled = objectTrackingEnabled };
                db.Connection.Open();
                _Connection = db.Connection;
            }
            else
                db = new RegstupDataContext(_Connection) { ObjectTrackingEnabled = objectTrackingEnabled };
     
            return db;
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Requete sur plusieurs tables
    Par Emotion dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 24/08/2007, 19h38
  2. [VB.NET] Transaction sur plusieurs DB
    Par olbi dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/05/2007, 08h23
  3. [SQL] SQL Requete sur plusieurs tables/traitement particulier
    Par fluojet dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/02/2007, 19h59
  4. Réponses: 1
    Dernier message: 06/12/2006, 18h25
  5. [SQL] dictinct sur plusieurs champs
    Par lapartdombre dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/11/2005, 15h11

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