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 :

Entity Framework AddObject et DeleteObject


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut Entity Framework AddObject et DeleteObject
    Bonjour,


    J'ai créé une vue qui me permet d'ajouter et supprimer des objets dans mon context (EF)

    Mon problème apparaît lorsque je souhaite supprimer un objet qui vient d'être ajouter sans être enregistré ; celui-ci est alors introuvable.

    Lors du clique pour ajouter un élément je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataAccess.EntitiesContext.Context.AddToFonctionGroupeDroits(FnGrDr);
    Lors de la suppression je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataAccess.EntitiesContext.Context.FonctionGroupeDroits.Count() // me retourne 0 alors que je viens d'ajouter une valeur
    DataAccess.EntitiesContext.Context.FonctionGroupeDroits.First(fgd=>fgd.nom==parametre);
    Entre les 2 instructions je ne fais pas de DataAccess.EntitiesContext.Context.Save / SaveChanges

    Le save est fait par la suite lors du clique sur un bouton permettant l'enregistrement.

    Ma question est : pourquoi l'élément enregistré n'apparaît pas ? Comment puis-je remédier à ce problème ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut bonjour
    Vous pouvez obtenir les informations en utilisant
    DataAccess.EntitiesContext.Context.FonctionGroupeDroits.Local

    tant que le savechanges n'a pas été effectué les données sont encore en local.
    Les opération sur le context (hors local) effectue des requêtes SQL sur la base
    cdt

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut
    Merci pour votre aide.

    Mon context est un Singleton qui n'est pas recréer.

    Donc de ce que j'ai compris cette action devrai l'ajouter dans le context local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataAccess.EntitiesContext.Context.AddToFonctionGroupeDroits(FnGrDr);
    Et ceci devrai effectuer une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataAccess.EntitiesContext.Context.FonctionGroupeDroits.First(fgd=>fgd.nom==parametre);
    Hors il s'avère que je n'ai pas accès à une fonction .Local.

    Je ne vois pas comment récupérer la valeur que je viens d'ajouter au context.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut bonjour
    Le fait que ce soit un singleton, n'empêche rien, je ne connais pas votre architecture , mais sur ce que je vois
    vous avez crée des fonctions comme "AddToFonctionGroupeDroits, FonctionGroupeDroits", qui encapsulent
    les entities de base si je puis dire, à mon avis vous allez devoir en créer d'autres pour accéder à vos données avant
    persistance en base.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut
    Dans mon cas si je fais une collection dans mon ViewModel et qu'ensuite je récupère l'objet via cette collection pour le supprimer ce serait une bonne idée ou il y a nettement mieux à faire ?

    Je ferai quelque chose comme ceci :

    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
     
    public class MonViewModel
    {
      private ObservableCollection<FonctionGroupeDroits> _mesObjets = null
      public ObservableCollection<FonctionGroupeDroits> mesObjets
      {
       get
       {
          if(_mesObjets == null)
          {
             _mesObjets = new ObservableCollection<FonctionGroupeDroits>(from Obs in  DataAccess.EntitiesContext.Context.FonctionGroupeDroits  );
          }
          return _mesObjets ;
       }
       set
       { 
          _mesObjets =value;
       }
      }
     
     
     
      public void Ajout()
      {
        FonctionGroupeDroits FnGrDr= new FonctionGroupeDroits()
        //Remplissage de mon objet ... set du nom
        DataAccess.EntitiesContext.Context.AddToFonctionGroupeDroits(FnGrDr);
      }
     
     
      public void Supp(string Nom)
      {
        FonctionGroupeDroits FnGrDr= mesObjets.First(O=>O.nom==Nom);
        DataAccess.EntitiesContext.Context.DeleteObject(FnGrDr);
        mesObjets.Remove(FnGrDr);
      }
    }

    Cela paraît-il cohérent ?

    Car dans ce cas je charge mes objets déjà enregistrés et si j'en ajoute ils vont aussi dans la collection ce qui me permet d'avoir une référence aux différents objets qui auraient pu être ajouté mais pas encore enregistré dans ma BDD.

    Je peux donc les supprimer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut bonjour
    Personnellement c'est ainsi que je pratique, lors de plusieurs modifications.
    avec context.ChangeTracker pour le suivi des modifications
    je vous conseille le blog de Mezil:
    http://blogs.msmvps.com/matthieu/
    C'est pas toujours simple, mais il maîtrise EF à fond.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/08/2008, 10h36
  2. ADO.NET Entity Framework, Astoria, Silverlight -> .NET 3.5 ?
    Par rad_hass dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/07/2008, 16h01
  3. version final d'Entity framework
    Par korchimustapha dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 04/07/2008, 17h21
  4. [ADO.NET Entity Framework] génération des tables
    Par anthyme dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/02/2008, 17h44
  5. Linq - Entity Framework
    Par Jfrancois57 dans le forum Framework .NET
    Réponses: 11
    Dernier message: 12/02/2008, 08h06

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