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 :

Débutant : gestion du contexte, sauvegarde (VS2010, C#4, EF4)


Sujet :

Entity Framework

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut Débutant : gestion du contexte, sauvegarde (VS2010, C#4, EF4)
    Bonjour,

    Je débute avec EF4 et je ne comprend pas très bien comment sauvegarder mes entités. Je suppose que le problème vient plutôt de la gestion du contexte.
    Mon cas de figure est le suivant, j'ai 3 tables modélisées avec le designer de VS :

    Commande(ID, Numero, ClientID, PieceID)
    Piece(ID, Nom)
    Client(ID, Nom, Adresse)
    + 2 associations entre Commandes-Pièce et Commande-Client

    J'ai une fonction qui permet de rechercher un client dans la bdd en fonction du nom et me retourne ledit client (et la même chose pour une pièce).
    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
     
    private void btnSearchClient_Click(object sender, EventArgs e)
    {
    using (var context = new Model())
                {          
                    Client clt = Client.findClient("blabla");
                }
    }
     
    private void btnSearchPce_Click(object sender, EventArgs e)
    {
    using (var context = new Model())
                {      
                    Piece pce = Pieces.findPiece(1234);
                }
    }
    Je créer maintenant une nouvelle commande que je veux sauvegarder (clic sur un bouton)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void btnSave_Click(object sender, EventArgs e)
            {
                using (var context = new Model())
                {
                    Commande c = new Commande();
                    c.Numero = 123456;
                    c.Client = clt;
                    c.Piece = pce;
     
                    context.AddToCommande(c);
                    context.SaveChanges();
                }
            }
    Cependant quand je clique sur le bouton de sauvegarde, j'ai l'erreur suivante :

    Impossible de définir la relation entre les deux objets, car ils sont attachés à des objets ObjectContext différents.
    J'ai bien essayé de détacher mes objets, de les ré-attacher mais ça ne provoque que d'autres erreurs.

    Est-ce que quelqu'un aurait une éventuelle piste de solution ?
    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Kanetsugu Voir le message
    J'ai bien essayé de détacher mes objets, de les ré-attacher mais ça ne provoque que d'autres erreurs.
    Tu as fait comment ? Quelles erreurs ?

    Sinon, tu peux pas simplement faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                using (var context = new Model())
                {
                    Client clt = context.Clients.Single(c => c.Name == "blabla");
                    Piece pce = context.Pieces.Single(p => p.Id == 1234);
     
                    Commande c = new Commande();
                    c.Numero = 123456;
                    c.Client = clt;
                    c.Piece = pce;
     
                    context.AddToCommande(c);
                    context.SaveChanges();
                }

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse.

    Probablement que ton code fonctionnerait. Mais dans mon cas j'aimerais vraiment séparer la fonction de recherche d'une pièce/client de la fonction de sauvegarde d'une commande.

    Pour détacher/attacher je fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    context.Detach(clt);
    context.Attach(clt);
    ça me donne une erreur comme quoi je ne peux ajouter au contexte un objet qui existe déjà (j'ai plus l'erreur exacte en tête)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Kanetsugu Voir le message
    ça me donne une erreur comme quoi je ne peux ajouter au contexte un objet qui existe déjà (j'ai plus l'erreur exacte en tête)
    Bizarre... ça ne fait pas partie des cas d'erreur documentés
    Attach sert justement à attacher au contexte un objet qui existe déjà dans la source de données, donc je vois pas pourquoi ça ferait une erreur comme ça... Tu es sûr que tu n'as pas utilisé AddObject au lieu de Attach ?

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut
    J'ai essayé de reproduire l'erreur, mais je n'ai pas réussi. J'ai finalement intégré le code de recherche directement dans le clic du bouton plutôt que dans une autre fonction (en suivant ton exemple ).

    Maintenant si j'utilise Attach je n'ai plus d'erreur et l'enregistrement est fait correctement dans la bdd.

    Je pense qu'il y avait un problème ailleurs qui apparaissait seulement au moment de l'enregistrement.

    Ce problème est donc résolu pour moi

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    J'ai finalement intégré le code de recherche directement dans le clic du bouton plutôt que dans une autre fonction (en suivant ton exemple ).

    Vive la séparation en couches :-)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

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

Discussions similaires

  1. Débutant: Gestion des références
    Par todobene dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2006, 07h32
  2. [débutant] gestion effacement console
    Par philippe123 dans le forum Général Java
    Réponses: 3
    Dernier message: 22/02/2006, 21h03
  3. Réponses: 5
    Dernier message: 12/12/2005, 18h42
  4. [Débutant] Obtenir un contexte graphique précis..
    Par milootooloo dans le forum 2D
    Réponses: 4
    Dernier message: 31/10/2005, 23h22
  5. [Débutant][Application web] : context d'une page JSP
    Par silver_dragoon dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/02/2004, 11h53

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