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

C# Discussion :

[EF] contexte, mise à jour d'une entité et requête


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut [EF] contexte, mise à jour d'une entité et requête
    J'ai une question sur la façon dont les mises à jour sont faites sur les entités.

    J'ai constaté la chose suivante :

    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
     
    // soit un order au status "ready" :
    MessageBox.Show(context.Orders.Find(2098).Status.ToString()); // aff : Ready
     
    // que je met à jour en validation "validating"
    context.Orders.Find(2098).Status = State.Validating;
     
    // (je ne sauve pas le contexte car tout cela fait partie d'une transaction)
     
    // confirmation visuelle qu'on a mis à jour
    MessageBox.Show(context.Orders.Find(2098).Status.ToString()); // aff : Validating
     
    // si je fait une requête
    MessageBox.Show(context.Orders
    .Where(o => o.Id == 2098)
    .Where(o => o.Status == State.Validating).Count().ToString()); // aff : 0
     
    // pourtant cela devrait afficher 1...
    Pouvez-vous m'expliquer ?

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    L'explication est la suivante :

    La méthode Find regarde d'abords en mémoire pour trouver une entité répondant à ta condition. Si l'entité existe alors elle est renvoyée. Si non alors la base de données est interrogée pour la récupérer.

    La requête avec la clause Where quant à elle interrogera toujours la base de données. Donc normal que t'es le résultat qui te semble bizarre mais qui est correct après tout vu que tes modifications ne sont pas encore stockées dans la base de données.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut
    Merci pour ta réponse.

    Le fait est que je m'étais posé cette question et que j'ai testé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show(context.Orders.Where(o => o.Id == 2098).First().Status.ToString()) // aff : Validating
    Il affiche donc bien la valeur "à jour mais pas définitivement sauvée" dans ce cas là...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par kchrel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MessageBox.Show(context.Orders.Where(o => o.Id == 2098).First().Status.ToString()) // aff : Validating
    Bah ! Là aussi c'est normal Si l'objet est déjà existant dans le contexte (déjà tracké par le contexte) alors toute requête suivante qui récupérera une donnée et que cette dernière correspond déjà à une entité déjà trackée alors la matérialisation ne sera pas effectuée par soucis de gain de performances.

    Ta requête avec la clause Count n’effectue pas de matérialisation mais agit directement sur les données existantes en base de données.

    Pour info la matérialisation consiste à la transformation d'une donnée de la base de données en objet donc en une instance d'une entité.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 55
    Par défaut
    Merci pour tes explications je comprend mais j'aurais aimé qu'il en soit autrement :-j

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2014, 11h17
  2. [AC-2003] Mise à jour d'une table depuis requête regroupement
    Par buzz73 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2009, 12h09
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Mise à jour d'une bd mysql
    Par joquetino dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/01/2005, 14h05
  5. [FireBird 1.5]Mise à jour d'une SGBD ?
    Par Sitting Bull dans le forum Débuter
    Réponses: 3
    Dernier message: 03/09/2004, 16h45

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