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 :

EF4 - N'enregistrer que les attributs scalaires


Sujet :

Entity Framework

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut EF4 - N'enregistrer que les attributs scalaires
    Bonjour,

    voilà j'ai une classe/Table Client qui contient une liste de projet.
    J'ai un écran qui m'affiche ue treeview avec le client et comme noeud enfant la liste des projets....
    Quand je selectionne le noeud client, j'ai à droite les infos sur le client s(nom, adresse..) que je peux modifier et j'ai également un bouton "Nouveau Projet" qui ajoute un nouveau projet au client.

    Maintenant j'aimerai séparer l'enregistrement des données scalaires et des relations. EN effet, imaginons que je modifie le nom du client ET que j'ajoute un nouveau projet, lorsque je ferais mon saveContext, il va m'enregistrer le nouveau nom et le nouveau projet... ce que j'aiemerai ce n'est enregistrer QUE le nom... et laisser l'enregistrerment du nouveau projet à un autre écran...
    Pour l'instant la seule facon de faire c'est, 'avant sauver le context, vider ma liste d'opération, puis apres la sauvegarde, la recharger...
    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
     
    List<Operation> lstOP = new List<Operation>();
    foreach(Operation op in client.Operations)
    {
        lstOp.Add(op);
    }
    client.Operations.Clear();
    client.Operations = null;
    using (var context = new Model())
    {
        context.ApplyChanges("Clients", client);
        context.SaveChanges();
    }
     
    foreach(Operation op in lstOp)
    {
       client.Operations.Add(op);
    }
    Même principe lorsque j'enregistre les données d'un projet, ne sauver QUE le projet et pas les objets reliés...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Client client = op.Client;
    op.Client = null;
    op.ClientID = client.ID;
    using (var context = new Model())
        {
            context.ApplyChanges("Operations", op);
            context.SaveChanges();
         }
     op.Client = client;
    Cette solution à l'air de fonctionner mais me parait un peu lourde... existe t'il une meilleur solution ?

    Merci de votre aide

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    Bon je n'ai trouv que 2 solutions...

    - soit ne pas mettre d'associations au niveau de mes objets.. et si j'ai besoin de la liste des opérations, je vais la rechercher si elle n'est aps deja chargé

    - soit avant d'enregistrer, je vide ma liste d'opération, j'enregistre, puis je recharge ma liste d'opération... comme ça il n'y a que les propriétés scalaires qui sont enregistrées.

    Avez vous une autre solution ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2014, 16h17
  2. enregistrer que les 2 premieres lettres d'une phrase
    Par pepsister dans le forum GTK+ avec C & C++
    Réponses: 14
    Dernier message: 29/04/2007, 23h05
  3. Réponses: 3
    Dernier message: 01/03/2007, 14h51
  4. Réponses: 2
    Dernier message: 07/07/2006, 01h26
  5. Prendre que les 5 premiers enregistrements (les + important)
    Par __fabrice dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/11/2005, 09h24

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