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 :

UPDATE d'une assocation N-N (many to many) [Débutant]


Sujet :

Entity Framework

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut UPDATE d'une assocation N-N (many to many)
    Bonjour.
    Je me tourne de nouveau vers vous pour vous exposer le problème suivant.

    Voici le MLD simplifié de l'application.

    Produit(id, nom, emplacement)
    Fournisseur(id, nom, adresse)
    Tarifs(id_produit, id_fournisseur, tarif) Couple clé primaire -> id_produit et id_fournisseur.

    Je ne sauvegarde qu'un seul tarif par fournisseur pour chaque produit.

    Lorsque j'essaie de mettre à jours la liste des fournisseurs d'un produit en en supprimant un par exemple j'obtiens l'erreur suivante : "The value of key member 'id_produit' on an instance of an entity of type 'tarifs' has changed. Entity key members cannot be changed"
    De même si j'essaie d'ajouter un nouveau fournisseur.

    // La variable UnFournisseurExistant désigne un fournisseur sélectionné au préalable dans une liste et donc déjà présent dans la liste des "Entities".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    tarif MonTarif = new tarif();
    MonTarif.prix = 10;
    MonTarif.fournisseur = UnFournisseurExistant;
     
    this.DomainContext.tarifs.Add(MonTarif);
    this.CurrentProduit.tarif.Add(MonTarif);
    this.DomainContext.SubmitChanges();
    Je comprends tout à fait que EF empêche la mise à jours des champs clé primaire d'objet existants mais de toute évidence ici j'essaie d'insérer un nouvel objet dans la relation tarifs.

    A noter que je n'ai pas le problème lorsqu'il s'agit d'un produit qui n'existe pas encore dans la base de données et que j'instancie séparément.

    Toute aide sera grandement appréciée.
    Merci par avance.

  2. #2
    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
    N'est ce pas plutot?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tarif MonTarif = new tarif();
    MonTarif.prix = 10;
    MonTarif.fournisseur = UnFournisseurExistant;
     MonTarif.Produit= UnProduitExistant;
    this.DomainContext.tarifs.Add(MonTarif);
    this.DomainContext.SubmitChanges();
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bonjour.

    Finalement, j'ai procédé de la façon suivante. Je ne sais pas si c'est le plus "clean" mais cela à l'air de fonctionner.

    En réalité, le fournisseur existant référencé dans l'objet tarif provient d'un autre DomainContext.
    Seulement, lorsque je rajoute l'objet tarif EF essai également d'attacher l'objet fournisseur au DomainContext courant.

    Donc je détache l'objet fournisseur du DomainContext courant puis j'attache l'objet fournisseur provenant de l'autre DomainContext.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SelectedFournisseur = this.DomainContext.fournisseurs.SingleOrDefault(f => f.numfournisseur == ((fournisseur)((ChoixFournisseurViewModel)ViewModel).FournisseursCollection.CurrentItem).numfournisseur);
                if (SelectedFournisseur != null)
                    this.DomainContext.fournisseurs.Detach(SelectedFournisseur);
    En tout cas merci pour votre aide.

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

Discussions similaires

  1. Update sur une table Many-to-Many
    Par Feneck91 dans le forum Entity Framework
    Réponses: 1
    Dernier message: 27/09/2013, 12h59
  2. Update d'une collection many-to-one avec fetch=eager
    Par totoranky dans le forum Hibernate
    Réponses: 0
    Dernier message: 16/07/2010, 18h16
  3. Réponses: 0
    Dernier message: 12/03/2009, 16h16
  4. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  5. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11

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