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

Entity Framework Discussion :

[transactions] petit probleme


Sujet :

Entity Framework

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 529
    Points : 1 310
    Points
    1 310
    Par défaut [transactions] petit probleme
    bonjour
    je tente d'utiliser pour la première fois les transactions avec cet exemple

    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 (DbContextTransaction transaction = Context.XXX.Database.BeginTransaction())
                {
                    for (int i = 0; i < 10; i++)
                    {
                        LogCompteur lc = new LogCompteur()
                        {
                            Compteur = 25,
                            Date = DateTime.Now,
                            Machine = 160,
                            Utilisateur = "m001" + "fgddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
                            Equipe = "j",
                        };
                        Context.XXX.LogCompteur.Add(lc);
                    }
                    try
                    {
                        Context.XXX.SaveChanges();
                        transaction.Commit();
                    }
                    catch
                    {
                        transaction.Rollback();
                    }
                }
                 Context.XXX.SaveChanges();
    je crée délibérément une erreur sur "utilisateur" pour tester le rollback
    le problème c'est que mes objets ne sont manifestement pas enlevé de LogCompteur
    ce qui fait qu'au Context.XXX.SaveChanges(); (le final en sortant de la transaction) ça plante

    aurais je oublié quelque chose ?
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  2. #2
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 317
    Points : 1 234
    Points
    1 234
    Par défaut
    Bonjour,

    Le rollback d'une transaction annule les actions entreprises dans celles ci. A savoir dans ton cas, aucune. Le add d'un item à la collection du DbSet va juste permettre à EF de tracker ton objet (et donc d’exécuter les actions adéquates lors du SaveChanges).

    Dans ton cas, vu que tu pète sur le SaveChanges, ton rollback n'a aucune action à revert. La transaction ne gère pas les états des objets par EF.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 529
    Points : 1 310
    Points
    1 310
    Par défaut
    donc si j'ai bien compris
    comme ca marche pas avec les objets
    la solution serait de faire un remove de l'objet qu'on a ajouté
    (c'est ce que je fais d'ailleurs)

    ce qui m'a trompé c'est cet exemple
    http://www.entityframeworktutorial.n...framework.aspx

    donc si je reformule, les transactions ne fonctionnent pas avec les objets
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  4. #4
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 317
    Points : 1 234
    Points
    1 234
    Par défaut
    Désolé, je viens de voir que tu avais répondu ^^".

    Hum je maitrise pas assez le bousin pour avoir une réponse précise la dessus. Après il faut voir en détail l'erreur sur le SaveChanges().

    Je suis tombé sur un cas cette semaine (avec des transactions dans l'histoire), où le SaveChanges() a levé une exception parce qu'il n'y avait aucune action à exécuter.

    Je pense donc que ton rollback à bien fait le taf et tout annulé et que ton SaveChanges() final pète parce qu'il n'a aucune action à exécuter.

    Par contre, je me demande à quoi sert ce SaveChanges(). Vu que tu en fait un plus haut, s'il passe, tu n'aura rien à SaveChanger (oui j'invente des verbes ). Et si ton premier SaveChanges() plante, tu ne veux justement pas sauvegarder les données, vu que tu fais un rollback.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 529
    Points : 1 310
    Points
    1 310
    Par défaut
    j'ai compris ce que tu voulais dire
    toutefois ce que je voulais montrer
    c'est que le principe est le suivant
    - j'ajoute 10 elements
    - je tente le save change
    - si ca marche je fais un commit (pas de soucis) dans ce cas la le savechanges en gras n'a aucun intérêt et peut éventuellement planter)
    - si ca marche pas je fais un rollback, c'est la que j'ai un probleme car tous les elements ajouté a LogCompteur ne sont pas enlevé et il ne me sort pas une erreur sur rien a sauver mais la meme erreur que celle qui a conduit au rollback
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  6. #6
    Membre éprouvé Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2013
    Messages : 317
    Points : 1 234
    Points
    1 234
    Par défaut
    Je vois ce que tu veux dire.

    Après, dans ce cas précis, si tu veux continuer de faire des actions après que la transaction ai échoué et sans être pollué par tes objets, après ton rallback tu peux disposer ton dbcontext et le réinstancier.

    Juste faire des remove() sur les objets est assez contraignant car à chaque fois que tu vas modifier ta transaction (rajouter d'autres objets dans une autre table par exemple), tu devra modifier ton catch pour le prendre en compte.

    Et ca sera plus simplement réutilisable dans d'autres endroits de l'appli.
    La Triforce du développement : Fainéantise, Curiosité et Imagination.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 529
    Points : 1 310
    Points
    1 310
    Par défaut
    en fait comme sur l'exemple que j'avais trouvé sur le net
    il semble que le mode objet ne gère pas vraiment les transactions finalement
    c'est marrant qu'ils y aient pas pensé chez microsoft ....
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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